Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将多个Axios调用链接在一起,以便它们同步运行,并且每个调用都可以使用上一次调用返回的数据_Javascript_Vue.js_Axios - Fatal编程技术网

Javascript 如何将多个Axios调用链接在一起,以便它们同步运行,并且每个调用都可以使用上一次调用返回的数据

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

我有一个项目数组,我需要为数组中的每个项目做一个Axios post。每个项目都依赖于从上一个项目返回的数据,因此我需要它们同步执行。我面临的问题是我不知道数组中有多少项。如果我知道数组计数,我可以执行以下操作:

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)递归是您的朋友。我使用循环中的一个函数完成了这项工作,该函数要么返回已解析的承诺,要么返回对自身的递归调用。如果你知道你在迭代中的位置,你可以测试你是否是最终的元素。如果你是最后一个元素,你就解决了最初的承诺。如果您不是最后一次迭代,那么您应该能够回忆起自己的下一次迭代(以及解析函数),并继续进行,直到完成为止。这有意义吗?如果不是的话,我可以详细说明。递归是你的朋友。我使用循环中的一个函数完成了这项工作,该函数要么返回已解析的承诺,要么返回对自身的递归调用。如果你知道你在迭代中的位置,你可以测试你是否是最终的元素。如果你是最后一个元素,你就解决了最初的承诺。如果您不是最后一次迭代,那么您应该能够回忆起自己的下一次迭代(以及解析函数),并继续进行,直到完成为止。这有意义吗?如果不是的话,我完全可以详细说明。我实现了第一种方法,它成功了。非常感谢!!我实现了第一个方法,它成功了。非常感谢!!