Javascript for循环中的Axios.get().then()
如何在for循环中运行Axios,每个循环都有相应的Javascript for循环中的Axios.get().then(),javascript,promise,axios,Javascript,Promise,Axios,如何在for循环中运行Axios,每个循环都有相应的.then()函数。然后在for循环结束后,运行另一个函数 例如: const array = ['asdf', 'foo', 'bar']; let users = []; for (i = 0; i < array.length; i++) { axios.get('/user/' + array[i].id).then(response => { // do something with response
.then()
函数。然后在for循环结束后,运行另一个函数
例如:
const array = ['asdf', 'foo', 'bar'];
let users = [];
for (i = 0; i < array.length; i++) {
axios.get('/user/' + array[i].id).then(response => {
// do something with response
users.push(response);
});
}
console.log(users);
const数组=['asdf','foo','bar'];
让用户=[];
对于(i=0;i{
//做些有反应的事情
用户。推送(响应);
});
}
console.log(用户);
您应该收集数组中的所有承诺,并按以下方式使用promise.all-
const array = ['asdf', 'foo', 'bar'];
let promises = [];
for (i = 0; i < array.length; i++) {
promises.push(axios.get('/user/' + array[i].id))
}
Promise.all(promises)
.then(responses => console.log(responses));
const数组=['asdf','foo','bar'];
让承诺=[];
对于(i=0;iconsole.log(responses));
如果您正在使用支持异步/await
的较新版本的javascript,您可以执行以下操作:
const array = ['asdf', 'foo', 'bar'];
let users = [];
for (const id in array) {
const response = await axios('/user/' + id);
users.push(response);
}
console.log(users);
const数组=[{id:'asdf'},{id:'foo'},{id:'bar'}];//稍微更改了输入数组,以便“array[i].id”可以实际工作-显然,询问者的真实数组不仅仅是一些人为的字符串
让用户=[];
让承诺=[];
对于(i=0;i{
//做些有反应的事情
用户。推送(响应);
})
)
}
然后(()=>console.log(用户));
Promise本身的.then()
方法返回一个Promise;因此,您可以使用Promise.all()
收集这些信息并等待所有信息
请注意,即使您在async
函数中执行此操作,您也不希望在for循环中等待wait
,因为这样每个请求都会在前一个请求启动之前等待它完成,并且您可能希望并行运行这些请求
根据您的用例,简明的异步/等待函数可能如下所示:
异步函数getMultiple(…objectsToGet){
让用户=[];
等待Promise.all(objectsToGet.map(obj=>
get('/user/'+obj.id)。然后(response=>{
//做些有反应的事情
用户。推送(响应);
})
));
返回用户;
}
//其他一些异步上下文
log(wait getMultiple({id:'asdf'},{id:'foo'},{id:'bar'}));
您可以使用关键字
Promise.all(users.map(u=>axios.get(`/user/${u.id}'))。然后(console.log,console.error)
将返回每个结果的日志数组。输出的顺序将与原始输入的顺序相匹配。如果您不希望您的响应混淆,会发生什么情况?每一个响应都将以数组的形式分别显示其各自的结果?谢谢,这很有效。但是,在for…in
循环中,id
指向索引,而不是值。因此,这里需要array[id]
来访问元素。否则,您可以使用for..of
循环。