Home > Software design >  Vue - Wait for for loop to fetch all items asynchronously
Vue - Wait for for loop to fetch all items asynchronously

Time:04-18

i have an array of data to be fetched, so i have to use a for loop to fetch all the data, but i want to do it asynchronously (multiple calls at the same time). After having fetched the data i also want to do some data manipulation, so i need to run code AFTER all the data has been fetched

for (var e in this.dataTofetch) {
  axios
    .get("https://www.example.com/api/"   e)
    .then((response) => this.fetchedData.push(response.data));
}
this.manipulateData();

The problem is that whenever i reach the manipulateData function, fetchedData is empty.

Also i tried doing it synchronously using await and it works but it becomes very slow when making multiple calls.

CodePudding user response:

You can use Promise.all()

Promise.all(
  this.dataTofetch.map(e => axios.get(`https://www.example.com/api/${e}`)),
).then(responses =>
  responses.forEach(r => this.fetchedData.push(r.data)),
);

this.manipulateData();

CodePudding user response:

You can achieve this with Promise.all method.

const promises = this.dataTofetch.map(e =>axios
    .get("https://www.example.com/api/"   e))
Promise.all(promises).then(arrOfRes =>)

CodePudding user response:

The best approach I can think of is to use Promise.all(). You will leave out the .then-handler, because axios.get() returns you a promise.

An exact implementation example can be found here at StackOverflow: Promise All with Axios.

  • Related