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

时间:2014-12-05 17:02:37

标签: 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 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打印出来之后执行。

1 个答案:

答案 0 :(得分:2)

您正在调用该函数。你打算传递一个函数,但是你传递了该函数的返回值,因为你不小心将它称为内联函数。你的意思是:

setTimeout(function(){ sendBatchReq(docs, fromIndex + batchSize, batchSize);}, 
           timeout);