直列動作のサンプル
function PromiseMaker(i) {
return function() {
return new Promise(function(resolve, reject) {
setTimeout(function(){
console.log("i:" + i);
resolve();
}, 100);
});
}
};
var p = Promise.resolve();
for(var i=0; i < 15; i++) {
p = p.then(PromiseMaker(i));
}
動作しないパターン
var p = Promise.resolve();
for(var i=0; i < 15; i++) {
p.then(PromiseMaker(i));
}
後者が動作しない理由
p.thenが返すPromiseに対してthenを繋げなければいけないのに、
最初のPromiseに対してすべて繋がってしまっているので、
並列で実行されてしまうということでした。
参考: http://p-baleine.hatenablog.com/entry/2014/03/14/085536
こういった形が必要なければ、素直にawait/asyncやPromise.allを使う方が良いかもしれません…。