首页 > 解决方案 > 如何使异步循环在迭代之间等待 1 秒?

问题描述

我有一个对 API 进行异步调用的 forEach 循环:

array.forEach(async (item) => {
  await callAnApi(item)
})

我想让这个循环在项目之间等待 1 秒 - 因为API 越来越饱和。

我们需要这样的东西:

array.forEach((item) => {
  setTimeout(async () => {
     await callAnApi(item)
  },1000)
})

这样它就不起作用了,因为整个循环在“同一时间”运行,所以每个调用将在 1 秒后“同时”触发。

我已经搜索了几十个答案,但没有一个能解决这个简单的问题。

标签: javascriptnode.js

解决方案


您可以增加超时延迟:

array.forEach((item, count) => {
  setTimeout(() => callAnApi(item), count * 1000);
});

这会以 1 秒的间隔设置计时器,而不是同时设置计时器。


推荐阅读