目前我正在尝试运行一个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的最后一个值。
答案 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。