使用forEach循环异步函数时,会先整个循环一遍,然后再输出异步函数的结果,这样就没法在循环结束后拿到异步函数的结果,正确的写法应该是用递归方法,等待异步函数执行完毕后才进入下一次循环。下面是两种写法的执行结果。
实例(复制到控制台看效果):
let arr = [5,4,1,3,2];
// forEach循环
arr.forEach((item,index)=>{
// 用setTimeout模拟异步函数
setTimeout(()=>{
console.info(item);
if(index>=arr.length-1) {
console.info('循环结束');
}
},item*100);
});
//递归循环
(function loop(i){
setTimeout(()=>{
console.warn(arr[i]);
if(++i>=arr.length) {
console.warn('循环结束');
} else {
loop(i);
}
},arr[i]*100);
})(0);

文章评论 暂无评论
暂无评论