大量のリソースを負荷をかけずにXHRさせたり、ストレージに大量のデータを保存したりを、同期処理で実現したいケースがあります。Promise を使った例が見つけられなかったので書いてみました。
XHRしたりデータを保存する部分は冗長なので、1秒おきにコンソールに数字を表示するものを例とします。
var count = 0;
var wait = function() {
return new Promise(function(resolve, reject) {
// 1秒待ちを入れてコンソールに数字を表示する
setTimeout(function() {
console.log(count++);
resolve();
}, 1000);
});
};
// 最後の Promise を保持
var last_promise = wait();
for (var i = 0; i < 10; i++) {
// 動的に .then() チェーンで繋いでいく
last_promise = last_promise.then(wait);
}
こんだけ。
動くサンプル
似たようなことをもっと簡単にやる方法があれば教えて下さい。