2015-06-05 45 views
4

我正在使用Nodejs來實現一個Web應用程序。我有一個對象列表,我想爲這些對象中的每一個調用第三方API。問題是api有速率限制,所以根據我的計算我必須每1.5秒調用一次api。我嘗試過使用setTimeout方法,但它在for循環中不起作用。我也查看了Cron模塊,但它不能幫助我,因爲我只想每個對象調用一次api。誰能幫我這個。這是我在服務器端代碼:api調用之間的延遲Nodejs

for(var obj in list) 
{ 
     setTimeout(function() { 
      apicall(); 
       }, 1500); 
} 
+0

您是試圖從節點服務器或瀏覽器執行此操作嗎? – taylorc93

+0

@ taylorc93從我的節點服務器 –

回答

4

的問題for循環,或任何循環是,他們通常是快。事實上,大約需要幾微秒來循環list。這意味着在幾微秒的範圍內,您可以安排幾個匿名函數在1.5秒後被調用。這意味着所有的功能,即使延遲,幾乎都會立即被解僱。

您需要的東西會導致延遲在for循環過程中增加。

最基本的設置是使用陣列的當前索引作爲乘數。

for(var i in list) { // list is an array, i is current index 
    setTimeout(function() { 
    apicall() 
    }, 1500 * i) // With each iteration, the delay increases 
} 

在一個側面說明,在這個基本的例子,你甚至不需要一個封閉:

setTimeout(apicall, 1500 * i) 
+0

我會嘗試它,讓你知道,但現在爲+1 –

+0

這很好 - 想知道這是否是好的做法壽。每次迭代的時間間隔是否會變得更長?它看起來像... –

1

你可以做的是在每個循環過程,從而增加時間的變量您每次循環的超時時間爲1500,3000,4500,每次增加1500次你不工作的原因是因爲該循環正在創建多次超時,所有超時都在幾毫秒之內,因爲它們是異步調用,所以在1600毫秒之後,你然而,有很多時間間隔都會一次發生。