Javascript node.js:带时间间隔的货币限制并行执行(速率限制)

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

我的目标是每个时间间隔发送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);


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);