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("エラー終了"); });