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

时间:2019-06-10 19:44:07

标签: 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
    users.push(response);
  });
}

console.log(users);

3 个答案:

答案 0 :(得分:1)

dialAlert

Promise的const array = ['asdf', 'foo', 'bar']; let users = []; let promises = []; for (i = 0; i < array.length; i++) { promises.push( axios.get('/user/' + array[i].id).then(response => { // do something with response users.push(response); }) ) } Promise.all(promises).then(() => console.log(users)); 方法本身会返回Promise;这样您就可以收集这些信息并通过.then()等待它们。

请注意,即使您是在Promise.all()函数中执行此操作,也不想在循环中async,因为那样每个请求都会等待上一个请求完成在它开始之前,大概您想并行运行这些请求。

根据您的用例,简洁的async / await函数可能如下所示:

await

答案 1 :(得分:0)

您应将所有promise收集在数组中,并以以下方式使用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));

答案 2 :(得分:0)

如果您使用支持async/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);