javascript - 将 Axios.all 用于 for 循环中的一组 post 调用

标签 javascript node.js axios

目前我正在尝试运行一个 for 循环,它表示为数组中的每个 JSON 对象创建一个 axios post 调用并将其添加到数组中。然后我使用 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 的最后一个值。我想知道是否有一种方法可以将所有数据保存在 promise 中,就像我创建它时一样,然后在提交时它不仅会使用提供给 postData 的最后一个值。

最佳答案

axios.all 期望在没有 then 的情况下收到未处理的 promise 。迭代响应 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

关于javascript - 将 Axios.all 用于 for 循环中的一组 post 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49161551/

相关文章:

mysql - 如果我想在nodejs中使用mysql数据库,waterline是中间件吗?

javascript - axios 超时重试

php - PHP向JavaScript返回表单提交结果,区分成功与失败

javascript - 如何构建一个将段落拆分为句子的正则表达式,但不会拆分 <> 内的任何标点符号?

javascript - Node.js 行被跳过然后被处理

node.js - 如何从数据库中删除环回模型和引用

javascript - axios 并发请求数 : any way to get the results from the successful requests even if some have failed?

node.js - 代理在 create-react-app 和 axios 中不起作用

javascript - 离线时在 Progressive Web App 中处理获取请求

javascript - 为什么我的 SVG 图像的内容消失了?我怎样才能将它居中并使其适合盒子的内容?