LoginSignup
0
0

More than 5 years have passed since last update.

Promise エラー

Posted at

概要

Promise.allってした時に、どれかでエラーが発生した際どういう挙動になるのか試してみました。たぶんググれば見つかることなんだと思いますが。。。

疑問と結果

  1. エラーが起きた場合は他の処理はどうなるのか
    • 他の処理はそのまま実行されました。
  2. エラーが複数起きた場合、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へ渡された。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0