Javascript api调用Nodejs之间的延迟

Javascript api调用Nodejs之间的延迟,javascript,node.js,api,express,Javascript,Node.js,Api,Express,我正在使用Nodejs实现一个web应用程序。我有一个对象列表,我想为每个对象调用第三方API。问题是api有速率限制,所以根据我的计算,我必须每1.5秒调用一次api。我尝试使用setTimeout方法,但它在for循环中不起作用。我还研究了Cron模块,但它对我没有帮助,因为我只想对每个对象调用一次api。有人能帮我吗。这是我在服务器端的代码: for(var obj in list) { setTimeout(function() { apicall();

我正在使用Nodejs实现一个web应用程序。我有一个对象列表,我想为每个对象调用第三方API。问题是api有速率限制,所以根据我的计算,我必须每1.5秒调用一次api。我尝试使用setTimeout方法,但它在for循环中不起作用。我还研究了Cron模块,但它对我没有帮助,因为我只想对每个对象调用一次api。有人能帮我吗。这是我在服务器端的代码:

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

for
循环或任何循环的问题在于,它们通常速度很快。事实上,在
列表上循环大约需要几微秒。这意味着在几微秒的范围内,您计划在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
}
另一方面,在这个基本示例中,您甚至不需要闭包:


您可以创建一个变量,在每次循环过程中增加时间,使每个循环的超时时间从1500、3000、4500增加到1500每次循环不起作用的原因是该循环在毫秒内创建了许多超时,因为它们是异步调用,所以在1600毫秒之后,你会有很多的间隔,所有的间隔都会同时消失

您是在节点服务器上还是在浏览器上执行此操作?@taylorc93在我的节点服务器上我会尝试并让您知道,但是现在+1非常有效-不知道这是否是一个好的做法。每次迭代的间隔是否都越来越长?看起来是的…谢谢你,伙计,你救了我四年后的夜晚。非常感谢。
setTimeout(apicall, 1500 * i)