前端知识体系:JavaScript基础-作用域和闭包-如何处理循环的异步操作
Posted fanmengfei
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前端知识体系:JavaScript基础-作用域和闭包-如何处理循环的异步操作相关的知识,希望对你有一定的参考价值。
如何处理循环的异步操作
先看一段代码
function getMoney(){ var money=[100,200,300] for( let i=0; i<money.length; i++){ compute.exec().then(()=>{ console.log(money[i]) //alert(i) }) } } //compute.exec()这是个异步方法,在里面处理一些实际业务 //这时候打印出来的很可能就是300,300,300(因为异步for循环还没有等异步操作返回Promise对象过来i值已经改变)
正确处理思路
async function getMoney(){ var money=[100,200,300] for( let i=0; i<money.length; i++){ await compute.exec().then(()=>{ console.log(money[i]) //alert(i) }) } } //关键字async/await async告诉getMoney方法里面存在异步的操作,await放在具体异步操作(方法)前面,意思是等待该异步返回Promise才会继续后面的操作
另外还有一种递归的处理思路
function getMoney(i) { var money=[100,200,300] compute.exec().then(() => { if ( i < money.length ) { console.log(money[i]); i++; getMoney(i); } }); } getMoney(0);//开始调用 //用递归来实现自我循环(具体循环在then里面,可以确保前面的compute.exec()的异步操作完成).then()是返回了Promise对象为resolve后才进行的(可以了解一下Promise对象)
原文地址:http://www.fly63.com/article/detial/6407
以上是关于前端知识体系:JavaScript基础-作用域和闭包-如何处理循环的异步操作的主要内容,如果未能解决你的问题,请参考以下文章
前端JavaScript面试技巧视频教程 js面试课程 共8章
进击的JavaScript|高薪面试必看JS基础-作用域和闭包