Async.jsモジュールをお勧めします。あなたは非同期ループを解決したい場合は
、次のことができます。
var i = 0;
async.whilst(
function() { return i < array.length; },
function(next) {
var elemet = array[i++];
request
.get(element.url)
.on('response', function(response) {
console.log(response);
// Do next while 5s passed
setTimeout(next, 5000);
}
}
},
function (err, n) {
// All Task over
}
);
それとも、いくつかの同時実行しようとする場合は:
// create a queue object with concurrency 2
var q = async.queue(function(task, next) {
console.log('request ' + task.url);
request
.get(task.url)
.on('response', function(response) {
console.log(response);
next();
}
}
}, 2);
// assign a callback
q.drain = function() {
console.log('all task have been processed');
};
// Push a request task to the queue every 5s
setInterval(function() {
let task = array.shift()
if (task) {
q.push(task, function(err) {
console.log('finished processing', task.url);
});
}
}, 5000);
あなたがたsetIntervalの内側にあなたのforeachを入れているが。したがって、5秒(5000ms)ごとに、すべてのget要求を実行しようとします。つまり、毎回3〜5回のget要求が発生します。本当にそれが必要ですか?または、実行するリクエストが1回必要ですが、5秒後にリクエスト2を要求するなどしますか? –
毎回すべてのget要求を実行する必要があります。最も簡単な解決策は、setIntervalを5秒より長くすることですが、要求を完了するための正確な時間を計算することはできません。 –
成功コールバックを使用する必要があります。または、RXJSを使用している場合は、オブザーバブルを作成できます。あなたはこれらの概念を知っていますか? –