Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript for循环中的Axios.get().then()_Javascript_Promise_Axios - Fatal编程技术网

Javascript for循环中的Axios.get().then()

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

如何在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
    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
循环。