在一个函数中 for循环 发送了多个请求, 怎么等到请求全部返还时执行下一个函数,因为下一个函数要使用返还值。
最简单的方式就是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){
//请求已全部返还,执行下一个函数
}
})
})
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有没有线程安全问题
}
}
13 回答12.7k 阅读
7 回答1.8k 阅读
3 回答1k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
2 回答1.8k 阅读
2 回答1.1k 阅读✓ 已解决
for中将每个请求放到一个promise中,然后把这个promise push到一个数组中,最后使用
let result = await Promise.all(promise数组);
, result包含了所有的返回值。