api调用Nodejs之间的延迟

Posted

技术标签:

【中文标题】api调用Nodejs之间的延迟【英文标题】:Delay between api calls Nodejs 【发布时间】:2015-08-21 00:18:58 【问题描述】:

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

for(var obj in list)

      setTimeout(function() 
          apicall();
                , 1500);

【问题讨论】:

您是尝试从节点服务器还是从浏览器执行此操作? @taylorc93 来自我的节点服务器 【参考方案1】:

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)

【讨论】:

我会尝试并告诉你,但现在 +1 这很好用——想知道这是否是好的做法。每次迭代的间隔是否会变长?好像是这样…… 非常感谢老兄,四年后你救了我的命。谢谢。【参考方案2】:

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

【讨论】:

以上是关于api调用Nodejs之间的延迟的主要内容,如果未能解决你的问题,请参考以下文章

Google Apps 脚本中两次调用(POST 和 GET)之间的延迟

使用 redux 调用的 API 被延迟

调用API请求时Nodejs中的ECONNRESET错误

NodeJS:串行编写多个 API 调用的好方法

Express 和 Nodejs:调用外部 API 的最佳方式

什么是延迟api调用的好方法?