あいつの日誌β

働きながら旅しています。

並列処理を ES6 の Promise で書く場合

Promise で並列処理を書く場合はこのように書くといいかも。

var tasks = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
// var tasks = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
Promise.all(tasks.map(function(num) {
  return new Promise(function(resolve, reject) {
    setTimeout(function() {
      reject(new Error(num));
    }, 1000);
    setTimeout(function() {
      resolve(num);
    }, num * 100);
  }); 
})
).then(function(results) {
  console.log(results);
}).catch(function(err) {
  console.log(err);
});

逐次的な処理は callback 地獄でも関数を適度に区切ればそんなに苦しくならない気もするので Promise で逐次処理は書くケースあんまりないかも。状況によるんでしょうけど。

今後 Javascript は ES6 で直接記述するのか、ES7 で書いて babel 的な事しながら書くのが良いのか分かりませんのでこういう場合どのモジュールを使って書けばいいのか分かってない。