我的目标是每个时间间隔发送N个请求,并确保网络延迟不会对我的算法产生影响。 我做了这个功能:
var results=[];
function sendBatchReq(docs, fromIndex, batchSize, timeout){
var counter=batchSize;
console.log(new Date()+ " executing");
for (var i = fromIndex; i < fromIndex+batchSize; i++) {
var url=docs[i].url;
request(url, function(err, res, data) {
results.push(JSON.parse(data));
counter--;
if(counter==0 && docs.length >=fromIndex+(batchSize*2)){
console.log(new Date()+" next batch");
setTimeout(sendBatchReq(docs,fromIndex+batchSize,batchSize), timeout);
}
});
}
}
sendBatchReq(docs, 0, 5, 10000);
这应该是这样的: 执行前5个请求,当第5个cb被执行时,在10秒后启动另一批5个请求。
问题是超时似乎不起作用:所有新的sendBathReq都在console.log打印出来之后执行。
答案 0 :(得分:2)
您正在调用该函数。你打算传递一个函数,但是你传递了该函数的返回值,因为你不小心将它称为内联函数。你的意思是:
setTimeout(function(){ sendBatchReq(docs, fromIndex + batchSize, batchSize);},
timeout);