zoukankan      html  css  js  c++  java
  • 如何处理循环的异步操作

    如何处理循环的异步操作

    先看一段代码

    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

  • 相关阅读:
    jar命令打jar包
    kafka的一些参数
    fastdfs-nginx-module-master的一些奇怪的特点
    nginx 禁止恶意域名解析
    tcpdump抓包vrrp
    gitlab提交代码
    [Data]Segment Tree
    [Data]FHQ treap
    [Data]带修改的主席树[树状数组套主席树]
    [Data]可持久化线段树-主席树
  • 原文地址:https://www.cnblogs.com/memphis-f/p/12134530.html
Copyright © 2011-2022 走看看