gpt4 book ai didi

javascript - Promise.all() 结合 setTimeout 来限制 API 调用

转载 作者:行者123 更新时间:2023-11-30 20:45:57 24 4
gpt4 key购买 nike

我有一组 n 用户,我需要为每个用户访问一个 API 端点以获取更多信息,这使用 Promise.all() 非常容易,但现在我的 n 变得更大了,我现在需要将我的调用限制在每 5 秒 50 次左右。有没有办法使用 .reduce() 结合 setTimeout(() => {}, 5000) 每 5 秒批处理 50 个调用,但仍然捕获结果Promise.all().then() 中的每次调用?

// Retrieve data from an API endpoint for n users [works]
const users = [...array of 50 ids];

Promise.all(users.map(user => axios.get(`api/users/${user.id})))
.then(results => resolve())
.catch(err => reject(err));

最佳答案

你可以做这样的事情,这有点伪,但我相信你明白了它的要点:):

const batchSize = 50;
const promises = [];
const users = [...lots of users];
const userCount = users.length;
let userIdx=0;

function getUsers() {
for(let i=0;i<batchSize;i++) {
if(userCount < ++userIdx) {
Promise.all(promises).then(doYourStuff);
return;
}
promises.push(axios.get('api/users/' + users[userIdx]));
}
setTimeout(_ => getUsers(), 5000);
}

关于javascript - Promise.all() 结合 setTimeout 来限制 API 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48708782/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com