ES6のPromiseでキューを書いてみた

こんにちは。鍋を食べました、きたけーです。

最近、JavaScript Promiseの本 を読んでいるのですが、ES6のPromiseでキューを実装してみたくなったのでメモ。

投げられたジョブをひとつひとつ実行(解決)していく、キュー。

var Queue = function () {
  var queue = Promise.resolve(true);
  var add = function (job) {
    queue = queue.then(job);
  };
  this.add = add;
};

var queue = new Queue();

queue.add(function () {
  var promise = new Promise(function (resolve) {
    setTimeout(function () {
      console.log('1');
      resolve();
    }, 100);
  });
  return promise;
});

queue.add(function () {
  var promise = new Promise(function (resolve) {
    setTimeout(function () {
      console.log('2');
      resolve();
    }, 200);
  });
  return promise;
});

queue.add(function () {
  var promise = new Promise(function (resolve) {
    setTimeout(function () {
      console.log('3');
      resolve();
    }, 300);
  });
  return promise;
});

アニメーションを順番に実行するときなどに有用そう(途中で例外が発生したり、rejectすると後ろに控えるpromiseがスルーされるので注意)。