私は、それぞれが遅延で区切られた "リクエスト"の配列を順次ロードしようとしています。遅延付きシーケンシャルプロミスループ
私は約束を使用していますが、何らかの理由により、要求が並行してではなく並行して実行されることに問題があります。
私は以下のようなテストコードを書いています。できます!要求を出して処理し、timesOutを3秒間実行し、2回目の要求に進みます。
var batches = [of_objects];
var sequence = Promise.resolve();
var self = this;
sequence
//Create request for first batch
.then(function(){
return self._createRequestPromise(batches[0]);
})
//callback so we can update, returns nothing
.then(callback)
//add 3 sec timeout before next request
.then(function(){
return new Promise(function (resolve, reject){
setTimeout(resolve, 3000);
});
})
//Create request for second batch
.then(function(){
return self._createRequestPromise(batches[1]);
})
//callback so we can update, returns nothing
.then(callback)
//add 3 sec timeout before next request
.then(function(){
return new Promise(function (resolve, reject){
setTimeout(resolve, 3000);
});
});
return sequence;
しかし、できるだけ早く私はそれをループの任意の並べ替えを配置しようとして、私の要求が同時にすべてを発射しています。そしてタイムアウトコールは後に起こります。
私は何が間違っているのか誤解しているのか分かりません。
//object I need to use to construct requests
var batches = [of_objects];
var sequence = Promise.resolve();
var self = this;
batches.forEach(function(batch){
sequence
//Function returns promise
.then(function(){
return self._createRequestPromise(batch); //this runs first 5x
})
//callback so we can update, returns nothing
.then(callback)
//add 3 sec timeout before next request
.then(function(){
return new Promise(function (resolve, reject){
setTimeout(resolve, 3000); //this runs after 5x
});
});
});
return sequence;
シーケンスをよく書かれている、あなたの問題は、ループである:それはすべてあなたのシーケンスが同時に実行されているので、ブロックされていません。この回答は役に立ちます:http://stackoverflow.com/a/40394679/6320039 –