Using Axios.all for an array of post calls in a for loop

10,176

axios.all expects to receive a unhandled promise without the then. To iterate over the responses axios.spread accepts the responses as its arguments. The code below should work(Could certainly be more concise).

let axiosArray = []
for (int x = 0; x < numOfItems; x++) {
  let postData = {}
  postData['size'] = shoe.size
  postData['color'] = shoe.color
  let newPromise = axios({
      method: 'post',
      url: postShoe,
      data: postData
    })
  axiosArray.push(newPromise)
}

axios
  .all(axiosArray)
  .then(axios.spread((...responses) => {
    responses.forEach(res => console.log('Success'))
    console.log('submitted all axios calls');
  }))
  .catch(error => {})

You could also refer this post which is similar to your question.

Share:
10,176
Totals
Author by

Totals

Updated on December 04, 2022

Comments

  • Totals
    Totals over 1 year

    Currently I am trying to run a for loop that says for each JSON object in a array create an axios post call and add it to an Array. Then I am using Axios.all to call them all at once. The issue I'm having is the JSON post object is the same for each of the post calls.

    let axiosArray = []
    let postData = {}
    for (int x = 0; x < numOfItems; x++) {
    
    postData['size'] = shoe.size
    postData['color'] = shoe.color
    let newPromise = axios({
      method: 'post',
      url: postShoe,
      data: postData
    })
      .then(responsed => {
        console.log('success')
      })
      .catch(error => {
    
        console.log('error')
      })
      axiosArray.push(newPromise)
    }
      axios
    .all(axiosArray)
    .then(() => {
      console.log('submitted all axios calls')
    })
    .catch(error => {})
    

    It runs two post calls like I want but its using the last value supplied to postData for each of the calls. I am wondering if there is a way to save all the data in the promise as it is when I create it and then on submit it will not only use the last value supplied to the postData.

  • Totals
    Totals about 6 years
    the issue im having isnt the responses. Its that each post call is using the same postData json structure. If I want to add 300 shoes it'll only add the last one entered 300 times instead of what the postData was at the time the promise was created.
  • Gokul Chandrasekaran
    Gokul Chandrasekaran about 6 years
    That is because the postData is declared outside the loop, javascript accessed objects by reference. Declaring the postData object within the loop will solve the issue. I have edited the answer to reflect the same.
  • rrrm93
    rrrm93 almost 5 years
    i keep getting the message axios.all is not a function
  • yusufcode
    yusufcode about 2 years
    there are 18 items in an array but it's only inserting one item of them. so, only one promise is working. what should i do in this case?