2014-12-05 86 views
0

我的目标是每个时间间隔发送N个请求,并确保网络滞后不会影响我的算法。 我做了这样的功能:node.js:具有时间间隔的货币限制并行执行(速率限制)


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

回答

2

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

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