Javascript Nodejs-axios-http请求循环
我对Axios和foreach循环有问题。我的Api提供程序只支持5个当代调用,因此我希望逐个调用,但当执行此代码时,每个主体都不会等待finish调用函数并接收错误代码429。如何解决这个问题?谢谢Javascript Nodejs-axios-http请求循环,javascript,node.js,axios,Javascript,Node.js,Axios,我对Axios和foreach循环有问题。我的Api提供程序只支持5个当代调用,因此我希望逐个调用,但当执行此代码时,每个主体都不会等待finish调用函数并接收错误代码429。如何解决这个问题?谢谢 async function call(url) { var options = { method: 'GET', url: url, auth: { username: '*****', password: '*****' } };
async function call(url) {
var options = {
method: 'GET',
url: url,
auth: {
username: '*****',
password: '*****'
}
};
var response = await axios.request(options);
print(response.data["Id"])
}
app.get('/save', async (req, res) => {
var options = {
method: 'GET',
url: 'getListUser',
auth: {
username: '***',
password: '***'
}
};
var response = await axios.request(options);
response.data["users"].forEach( async (val) => {
console.log("ENTER");
var url = 'getDetailUser' + val["id"];
var res = await call(url); // <- How to wait finish this?
console.log("EXIT")
}, (err) => {
console.log(err)
})
res.status(200).send("ok").end();
});
异步函数调用(url){
变量选项={
方法:“GET”,
url:url,
认证:{
用户名:'******',
密码:'*****'
}
};
var响应=等待axios.request(选项);
打印(响应数据[“Id”])
}
app.get('/save',异步(req,res)=>{
变量选项={
方法:“GET”,
url:'getListUser',
认证:{
用户名:'***',
密码:'***'
}
};
var响应=等待axios.request(选项);
response.data[“users”].forEach(异步(val)=>{
控制台日志(“输入”);
var url='getDetailUser'+val[“id”];
var res=等待呼叫(url);//{
console.log(错误)
})
res.status(200).send(“ok”).end();
});
承诺。一切()都是正确的
await Promise.all(response.data["users"].map(val => {
var url = 'getDetailUser' + val["id"];
return call(url);
}))
我想说@Ifaruki的答案是正确的,只是有一点小小的改变
await Promise.allSettled(response.data["users"].map(val => {
var url = 'getDetailUser' + val["id"];
return call(url);
}))
在某些情况下,所有承诺都可能起作用,但如果任何一个承诺失败,承诺的全部结果都将是拒绝
代码429可以通过查看FYI来解决,
Promise
无法与涉及回调ieforEach
的循环一起工作。或者,您可以使用进行of
try {
for (const val of response.data['users']) {
console.log("ENTER");
var url = 'getDetailUser' + val["id"];
var res = await call(url);
console.log("EXIT")
}
} catch (error) {
console.log(error)
}