异步操作的问题

在一个函数中 for循环 发送了多个请求, 怎么等到请求全部返还时执行下一个函数,因为下一个函数要使用返还值。

阅读 2.1k
4 个回答

for中将每个请求放到一个promise中,然后把这个promise push到一个数组中,最后使用 let result = await Promise.all(promise数组);, result包含了所有的返回值。

最简单的方式就是1楼说的那样,用async+await 结合Promise.all来实现,我提供另外一个比较原始的方法给你参考下。
另外用一个新数组缓存请求结果,异步拿到结果后保存到数组,当缓存数组长度与请求长度一致时,就说明请求已经全部返回可以执行下一步了

const result = [];
const request = [1, 2, 3, 4, 5];
request.forEach(id => {
  axios.get(`/user?ID=${id}`).then(res => {
    result.push(res);
    if (result.length === request.length){
      //请求已全部返还,执行下一个函数
    } 
  })
})

如果是vue项目的话,有些异步问题是可以用watch监听来解决的

新手上路,请多包涵

1.如楼上所述,创建一个保存结果状态的数组,且假设你要循环的ajax数量为ajax_count
var result = [];
2.声明一个ajax的回调函数,该函数会根据result数组的状态来执行另一个函数(就是在ajax全部执行完成后需要执行的内容)
function on_all_ajax_finished()
{

console.log("所有ajax执行完毕!");

}

function ajax_callback()
{

if(result.length == ajax_count -1)
{
    on_all_ajax_finished();
}
else
{
    result.push(1);//push一个任意的内容到数组来增加数组的长度,不知道js有没有线程安全问题
}

}

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题