forループでPromiseを直列に処理させる方法

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