2014-12-05 98 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);