码迷,mamicode.com
首页 > 编程语言 > 详细

前端知识体系:JavaScript基础-作用域和闭包-如何处理循环的异步操作

时间:2020-01-03 12:36:33      阅读:66      评论:0      收藏:0      [点我收藏+]

标签:异步   操作   mon   就是   作用域   art   完成   调用   exec   

如何处理循环的异步操作

先看一段代码

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基础-作用域和闭包-如何处理循环的异步操作

标签:异步   操作   mon   就是   作用域   art   完成   调用   exec   

原文地址:https://www.cnblogs.com/memphis-f/p/12134530.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!