https://qiita.com/saka212/items/ff61a6de9c3e19810c5d
単純にforループでpromise.thenを追加してやればいい。
function MakeWaitPromise(seconds) {
var d = $.Deferred();
setTimeout(function(){ d.resolve(seconds); }, seconds * 1000);
return d.promise();
}
var oLoopPromise = $.when();
for (let i=1; i<=5; i++) {
let proc = function(result) {
if (result) { console.log(`${result}秒待ち完了。`); }
return MakeWaitPromise(i);
}
oLoopPromise = oLoopPromise.then(proc); // ●ここがポイント
}
oLoopPromise.then(function(result) {
console.log(`${result}秒待ち完了。`);
console.log("全て終了");
});途中で止めたいときはrejectすれば以降の処理は実行されない。
var oLoopPromise = $.when();
for (let i=1; i<=5; i++) {
let proc = function(result) {
if (result) { console.log(`${result}秒待ち完了。`); }
return MakeWaitPromise(i);
}
if (i==3) {
proc = function(result) {
if (result) { console.log(`${result}秒待ち完了。`); }
return $.Deferred().reject();
}
}
oLoopPromise = oLoopPromise.then(proc); // ●ここがポイント
}
oLoopPromise.then(function(result) {
console.log(`${result}秒待ち完了。`);
console.log("全て終了");
}, function() {
console.log("エラー終了");
});