バンビのブログ

駆け出しのエンジニアです!日々の疑問など備忘録として書いていきます。

Promiseとは その2

Promise:
【第二弾 Promiseとは】

・「Promise.all」で複数のPromiseを「並行処理」する方法こともできます。

非同期処理を配列に複数格納して、配列内のすべての非同期処理が完了したら.thenを実行するということができる。

 Promise.all([ 

   非同期処理1(resolve('非同期処理1終了')),  

   非同期処理2(resolve('非同期処理2終了')), 

   非同期処理3(resolve('非同期処理3終了'))

  ]).then(function(data) { 

   // ここのdataには配列が格納されます。
   console.log(data); 
   console.log('すべての処理が終了しました!');

 })

//下記のような結果が出力される
["非同期処理1終了 ", "非同期処理2終了", "非同期処理3終了"]
すべての処理が終了しました!


・エラー並行処理中にエラーが発生した場合

 Promise.all([ 

   非同期処理1(resolve('非同期処理1終了')),

   非同期処理2(reject('error')),//エラーになった場合 

   非同期処理3(resolve('非同期処理3終了')) 

  ]).then(function(data) { 

   console.log(data); 
   console.log('すべての処理が終了しました!');

})
rejectでerrorとなっているので.thenのメソッドは実行されません。注意が必要です。


・Promise.race()は複数のPromiseを「並行処理」するが、並行処理のなかで「resolve」または「reject」が呼び出されたら「.then」の処理が実行されます。

 Promise.race([ 

   非同期処理1(resolve('非同期処理1終了')),

   非同期処理2(reject('error')),//エラーになった場合 

   非同期処理3(resolve('非同期処理3終了')) 

  ]).then(function(data) { 
   // ここのdataには配列が格納されます。
   console.log(data); 
   console.log('すべての処理が終了しました!');
 })

//allのときとは違い、.thenが実行されました。
["非同期処理1終了 ", "error", "非同期処理3終了"]
すべての処理が終了しました!
このような違いがあるので注意です。