首页 > 解决方案 > 如何在 for 循环中调用 setTimeout 以进行 api 调用

问题描述

我有以下循环:

        for (let z = 0; z < searchArray.length; z++) {


              searchFMG(searchArray[z])
        }

searchFMG 在哪里进行 api 调用(使用 axios)并处理结果。

问题是我需要连接的 api 有一个我可以发出请求的速率限制。所以我尝试将其更改为:

setTimeout(searchFMG(searchArray[z], 1000)

它不会调用 z 的每个值。

我有什么方法可以减慢循环速度,或者以某种方式让这些调用相隔一秒?

谢谢

标签: javascriptnode.js

解决方案


如果您想在一秒钟内建立连接,请尝试这样的操作。制作一个异步sleep函数来模拟“等待”。每次请求后等待 1 秒,然后再移动到数组中的下一项。但是,此解决方案确实涉及将您的代码包装在异步函数中(如果还没有的话)。

const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));

async function performSearch(){
    for (let z = 0; z < searchArray.length; z++) {
        await searchFMG(searchArray[z]);
        await sleep(1000);
    }
}

推荐阅读