Javascript 循环中受限制的API调用的Wait函数

Javascript 循环中受限制的API调用的Wait函数,javascript,api,Javascript,Api,我正在尝试处理3个节流API端点,每次通过循环时都要调用这些端点。我试图确保每次调用迭代之间有500毫秒的延迟,这样我就不会发出太多的请求,相反,它会在等待500毫秒后发出所有调用*迭代次数,这当然达到了返回429的请求限制 我所做的是创建一个简单的等待函数,但它不起作用,所以我开始用谷歌搜索这个问题。我发现的几乎每个解决方案都是相同类型的函数,要么忽略等待,要么执行我现在遇到的操作,要么建议使用我正在避免的第三方依赖项,因为这是我在代码中执行此操作的唯一位置。现在我有了一个新的等待函数,在研究

我正在尝试处理3个节流API端点,每次通过循环时都要调用这些端点。我试图确保每次调用迭代之间有500毫秒的延迟,这样我就不会发出太多的请求,相反,它会在等待500毫秒后发出所有调用*迭代次数,这当然达到了返回429的请求限制

我所做的是创建一个简单的等待函数,但它不起作用,所以我开始用谷歌搜索这个问题。我发现的几乎每个解决方案都是相同类型的函数,要么忽略等待,要么执行我现在遇到的操作,要么建议使用我正在避免的第三方依赖项,因为这是我在代码中执行此操作的唯一位置。现在我有了一个新的等待函数,在研究的基础上稍作修改。这是我目前的代码:

// wait function

async function wait(ms) {
  return new Promise(resolve => {
    setTimeout(resolve, ms);
  });
}


// one of 3 identical api calls (except the endpoint changes, in this case I've filled it with 
example.com)

function callAPI(param) {
    return fetch (`https://example.com?param=${param}`)
        .then(res => {
            if (res.ok) {
                return res.json();
            }
        });
}


// Iteration

async function getEach(arr) {
    arr.forEach(async name => {
        await wait(500);
        await callAPI(name);
        // then api call 2, 3
        // then return, console log, append to obj or array, w.e. with the api results
    });
}

getEach(arrList);
我希望知道的是:

  • 理解为什么这不是我认为应该的方式
  • 如何达到我期望的结果

  • 感谢

    Array.forEach不会等待wait()和callAPI()调用完成,因此会很快连续调用它们。但是你可以很容易地用一个。。循环的一部分或只是一个for循环

    例如:

    async function getEach(arr) {
        for(let name of arr) {
            await wait(500);
            await callAPI(name);
        }
    }
    

    异步函数getEach(arr){ for(设i=0;iArray.forEach不会等待wait()和callAPI()调用完成,因此会很快连续调用它们。但是你可以很容易地用一个。。循环的一部分或只是一个for循环

    例如:

    async function getEach(arr) {
        for(let name of arr) {
            await wait(500);
            await callAPI(name);
        }
    }
    

    异步函数getEach(arr){ for(设i=0;i谢谢!我发现了一些使用forEach的例子,这就解释了为什么我的尝试都不起作用。我会尽快接受它。这是Array.forEach.的行为,真烦人。。也许不是我们所期望的那样。但至少我们可以使用其他循环构造来完成工作!是的,这很烦人,我无法想象如果所有的循环都有相同的行为,那会让我发疯。我很少使用
    forEach
    ,但是使用一个清晰的数组进行迭代,不需要任何突变,我甚至没有想到尝试使用
    for
    for of
    。谢谢你帮我度过了这一天,我在这件事上花了很多令人尴尬的时间。我想我们都被这件事弄糊涂了,浪费了时间,至少我们可以从彼此的经历中受益!非常感谢。我发现了一些使用forEach的例子,这就解释了为什么我的尝试都不起作用。我会尽快接受它。这是Array.forEach.的行为,真烦人。。也许不是我们所期望的那样。但至少我们可以使用其他循环构造来完成工作!是的,这很烦人,我无法想象如果所有的循环都有相同的行为,那会让我发疯。我很少使用
    forEach
    ,但是使用一个清晰的数组进行迭代,不需要任何突变,我甚至没有想到尝试使用
    for
    for of
    。谢谢你帮我度过了这一天,我在这件事上花了很多令人尴尬的时间。我想我们都被这件事弄糊涂了,浪费了时间,至少我们可以从彼此的经历中受益!与此问题非常相似:@Wyck似乎解决方案与问题的原因相同,但感知问题与此问题非常相似:@Wyck似乎解决方案与问题的原因相同,但感知问题与此不同