Javascript 循环中受限制的API调用的Wait函数
我正在尝试处理3个节流API端点,每次通过循环时都要调用这些端点。我试图确保每次调用迭代之间有500毫秒的延迟,这样我就不会发出太多的请求,相反,它会在等待500毫秒后发出所有调用*迭代次数,这当然达到了返回429的请求限制 我所做的是创建一个简单的等待函数,但它不起作用,所以我开始用谷歌搜索这个问题。我发现的几乎每个解决方案都是相同类型的函数,要么忽略等待,要么执行我现在遇到的操作,要么建议使用我正在避免的第三方依赖项,因为这是我在代码中执行此操作的唯一位置。现在我有了一个新的等待函数,在研究的基础上稍作修改。这是我目前的代码:Javascript 循环中受限制的API调用的Wait函数,javascript,api,Javascript,Api,我正在尝试处理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;iasync function getEach(arr) {
for(let name of arr) {
await wait(500);
await callAPI(name);
}
}
或
异步函数getEach(arr){
for(设i=0;iforEach
,但是使用一个清晰的数组进行迭代,不需要任何突变,我甚至没有想到尝试使用for
或for of
。谢谢你帮我度过了这一天,我在这件事上花了很多令人尴尬的时间。我想我们都被这件事弄糊涂了,浪费了时间,至少我们可以从彼此的经历中受益!非常感谢。我发现了一些使用forEach的例子,这就解释了为什么我的尝试都不起作用。我会尽快接受它。这是Array.forEach.的行为,真烦人。。也许不是我们所期望的那样。但至少我们可以使用其他循环构造来完成工作!是的,这很烦人,我无法想象如果所有的循环都有相同的行为,那会让我发疯。我很少使用forEach
,但是使用一个清晰的数组进行迭代,不需要任何突变,我甚至没有想到尝试使用for
或for of
。谢谢你帮我度过了这一天,我在这件事上花了很多令人尴尬的时间。我想我们都被这件事弄糊涂了,浪费了时间,至少我们可以从彼此的经历中受益!与此问题非常相似:@Wyck似乎解决方案与问题的原因相同,但感知问题与此问题非常相似:@Wyck似乎解决方案与问题的原因相同,但感知问题与此不同