2014-12-05 3 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 запроса после 10 секунд.

Проблема в том, что тайм-аут, похоже, не работает: все новые sendBathReq выполняются сразу после завершения печати console.log.

ответ

2

Вы вызываете функцию. Вы хотели передать функцию, но вы передаете возвращаемое значение этой функции, потому что вы случайно назвали ее встроенной. Возможно, вы имели в виду:

setTimeout(function(){ sendBatchReq(docs, fromIndex + batchSize, batchSize);}, 
      timeout); 
Смежные вопросы