我需要限制这个for循环发送的请求数量



我正在抓取请求,但我得到了'发送到许多请求错误',我怎么能节流请求的数量这个循环发送到10个请求每秒?

let accesstoken = token2.access_token; 
const promises = [];
for(var i = 0; i < 5;i++){
promises.push(fetch('https://us.api.blizzard.com/profile/wow/character/'+ slug[i]+'/'+ lowercasenames[i] +'?namespace=profile-us&locale=en_US', {
method: 'GET',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${accesstoken}`
}
})
.then(logresponse => { console.log(logresponse.status); return logresponse})
.then(response => response.json())
.catch(error => console.log(error)))

}
Promise.all(promises)
.then(data => { profiledata(data)})
};```

确保你叫throttledRequest范围中调用的所有请求,并不是每个字符/accessToken蛞蝓所以它将所有的请求数

// a function that throttled the request up to 10 requests a second
const throttledRequest = () => {
const requestCount = 0;
const fetchRequest = (accessToken, slug, name) =>
fetch(
`https://us.api.blizzard.com/profile/wow/character/${slug}/${name}?namespace=profile-us&locale=en_US`,
{
method: "GET",
headers: {
Authorization: `Bearer ${accessToken}`,
"Content-Type": "application/json",
},
}
).then((response) => {
console.log(response.status);
return response.json();
}).catch(err=>console.error(err));
return (accessToken, slug, name) => {
if (requestCount < 10) {
requestCount++;
return fetchRequest(accessToken, slug, name);
} else {
return new Promise((resolve, reject) => {
setTimeout(() => {
requestCount=0;
resolve(fetchRequest(accessToken, slug, name));
}, 1000);
});
}
};
};
const runWithAsyncAwait = async () => {
const request = throttledRequest();
for (let i = 0; i < 5; i++) {
const data = await request("accessToken", slug[i], "name");
profiledata(data);
}
};
const runWithPromises = async () => {
const request = throttledRequest();
for (let i = 0; i < 5; i++) {
request("accessToken", slug[i], "name").then((data) => profiledata(data));
}
};

最新更新