Javascript 如何将多个Axios调用链接在一起,以便它们同步运行,并且每个调用都可以使用上一次调用返回的数据
我有一个项目数组,我需要为数组中的每个项目做一个Axios post。每个项目都依赖于从上一个项目返回的数据,因此我需要它们同步执行。我面临的问题是我不知道数组中有多少项。如果我知道数组计数,我可以执行以下操作:Javascript 如何将多个Axios调用链接在一起,以便它们同步运行,并且每个调用都可以使用上一次调用返回的数据,javascript,vue.js,axios,Javascript,Vue.js,Axios,我有一个项目数组,我需要为数组中的每个项目做一个Axios post。每个项目都依赖于从上一个项目返回的数据,因此我需要它们同步执行。我面临的问题是我不知道数组中有多少项。如果我知道数组计数,我可以执行以下操作: let my_array = [34, 44, 72]; axios.post( 'url-to-get-data', { post_data_1: my_array[0] } ).then(res => { ax
let my_array = [34, 44, 72];
axios.post(
'url-to-get-data',
{
post_data_1: my_array[0]
}
).then(res => {
axios.post(
'url-to-get-data',
{
post_data_1: my_array[1],
post_data_2: res.data
}
).then(res => {
//Third axios post.....
}
).catch();
}
).catch();
有人知道我如何做到这一点吗?你本质上是在问如何链接(未知长度的)异步工作 使用承诺(和递归):
let asyncDec=count=>Promise.resolve(count-1);
let handler=count=>{
console.log('handled',count);
如果(计数)
返回asyncDec(计数)。然后返回(处理程序)
};
asyncDec(10)。然后(handler)代码>您实际上是在问如何链接(未知长度的)异步工作
使用承诺(和递归):
let asyncDec=count=>Promise.resolve(count-1);
let handler=count=>{
console.log('handled',count);
如果(计数)
返回asyncDec(计数)。然后返回(处理程序)
};
asyncDec(10)。然后(handler)代码>递归是您的朋友。我使用循环中的一个函数完成了这项工作,该函数要么返回已解析的承诺,要么返回对自身的递归调用。如果你知道你在迭代中的位置,你可以测试你是否是最终的元素。如果你是最后一个元素,你就解决了最初的承诺。如果您不是最后一次迭代,那么您应该能够回忆起自己的下一次迭代(以及解析函数),并继续进行,直到完成为止。这有意义吗?如果不是的话,我可以详细说明。递归是你的朋友。我使用循环中的一个函数完成了这项工作,该函数要么返回已解析的承诺,要么返回对自身的递归调用。如果你知道你在迭代中的位置,你可以测试你是否是最终的元素。如果你是最后一个元素,你就解决了最初的承诺。如果您不是最后一次迭代,那么您应该能够回忆起自己的下一次迭代(以及解析函数),并继续进行,直到完成为止。这有意义吗?如果不是的话,我完全可以详细说明。我实现了第一种方法,它成功了。非常感谢!!我实现了第一个方法,它成功了。非常感谢!!