使用Axios.all获取for循环中的post调用数组

时间:2018-03-07 21:31:35

标签: javascript node.js axios

目前我正在尝试运行一个for循环,该循环表示对于数组中的每个JSON对象创建一个axios post调用并将其添加到Array。然后我使用Axios.all立即调用它们。我遇到的问题是JSON post对象对于每个post调用都是相同的。

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 => {})

它会像我想要的那样运行两个post调用,但它使用为每个调用提供给postData的最后一个值。我想知道是否有一种方法可以保存承诺中的所有数据,因为它是在创建它时然后在提交时它将不仅使用提供给postData的最后一个值。

1 个答案:

答案 0 :(得分:2)

axios.all期望在没有then的情况下收到未处理的承诺。迭代响应axios.spread接受响应作​​为其参数。下面的代码应该可以工作(当然可以更简洁)。

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 => {})

您也可以参考与您的问题类似的post