Javascript node.js:带时间间隔的货币限制并行执行(速率限制)
我的目标是每个时间间隔发送N个请求,并确保网络延迟不会影响我的算法。 我做了这个功能:Javascript node.js:带时间间隔的货币限制并行执行(速率限制),javascript,node.js,settimeout,Javascript,Node.js,Settimeout,我的目标是每个时间间隔发送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 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);
var结果=[];
函数sendBatchReq(docs、fromIndex、batchSize、超时){
var计数器=批处理大小;
log(新日期()+“正在执行”);
对于(var i=fromIndex;i=fromIndex+(batchSize*2)){
log(新日期()+“下一批”);
setTimeout(sendBatchReq(文档,fromIndex+batchSize,batchSize),超时);
}
});
}
}
sendBatchReq(文档,0、5、10000);
这应该是这样的:
执行前5个请求,当执行第5个cb时,在10秒后启动另一批5个请求
问题是超时似乎不起作用:所有新的sendBathReq都是在console.log打印输出之后执行的。您正在调用函数。您本想传递一个函数,但传递该函数的返回值是因为您意外地内联调用了它。你是说:
setTimeout(function(){ sendBatchReq(docs, fromIndex + batchSize, batchSize);},
timeout);