使用forEach循环异步函数时,会先整个循环一遍,然后再输出异步函数的结果,这样就没法在循环结束后拿到异步函数的结果,正确的写法应该是用递归方法,等待异步函数执行完毕后才进入下一次循环。下面是两种写法的执行结果。
实例(复制到控制台看效果):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
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); |
文章评论 暂无评论
暂无评论