概要
Promise.allってした時に、どれかでエラーが発生した際どういう挙動になるのか試してみました。たぶんググれば見つかることなんだと思いますが。。。
疑問と結果
- エラーが起きた場合は他の処理はどうなるのか
- 他の処理はそのまま実行されました。
- エラーが複数起きた場合、catchへは何が渡されるのか。
- 一つ目のエラーだけがcatchへ渡されました。
- また、catchは他の処理の終了を待たずに呼び出されました。
試した内容
1
let promises = [];
promises.push(new Promise((resolve, reject) => {
console.log('reject1');
throw new Error('reject1');
}));
for(let i = 0; i < 3; i++) {
promises.push(new Promise((resolve) => {
setTimeout(()=>{
console.log(i);
resolve(i);
}, 100);
}))
}
Promise.all(promises).then((data) => {
console.log('success');
console.log(data);
}).catch((error)=>{
console.log('fail');
console.log(error);
});
reject1
fail
Error: reject1
at promises.push.Promise (/test/test.js:5:9)
...
0
1
2
エラーが起きても他は実行された。
2
let promises = [];
promises.push(new Promise((resolve, reject) => {
console.log('reject1');
throw new Error('reject1');
}));
promises.push(new Promise((resolve, reject) => {
console.log('reject2');
throw new Error('reject2');
}));
for(let i = 0; i < 3; i++) {
promises.push(new Promise((resolve) => {
setTimeout(()=>{
console.log(i);
resolve(i);
}, 100);
}))
}
Promise.all(promises).then((data) => {
console.log('success');
console.log(data);
}).catch((error)=>{
console.log('fail');
console.log(error);
});
reject1
fail
Error: reject1
at promises.push.Promise (/test/test.js:5:9)
...
0
1
2
一つ目のエラーだけがcatchへ渡された。