【ES7 async await 依次执行异步,全部执行完,再执行最后的代码】

ES7 async await 依次执行异步,全部执行完,再执行最后的代码


async function(){
await a();
await b();
console.log()//异步依次执行完毕后,执行此处最后的代码
}

写法

//模拟异步操作
function a(){//a异步
      return new Promise(function(resolve){
        console.log(`a起跑...`);
        setTimeout(function(){//异步
          console.log(`a到达终点!`);
          //之后,主动调用resolve开门!
          resolve();//自动执行.then()中串联的下一项任务
        },6000)
      })
    }
    function b(){//b异步
      return new Promise(function(resolve){
        console.log(`b起跑...`);
        setTimeout(function(){//异步
          console.log(`b到达终点!`);
          //之后,主动调用resolve
          resolve(); //通知.then中串联的下一项任务可以开始执行!
        },4000)
      })
    }
    function c(){//c异步
      return new Promise(function(resolve){
        console.log(`c起跑...`);
        setTimeout(function(){//异步: 在主程序之外
          console.log(`c到达终点!`);
          resolve();
        },2000)
      })
    }
//await等待前一个程序执行完,再执行当前程序
    (async function (){
      await a();
      await b();
      await c();
      console.log('比赛结束!')
    })()
    //a起跑...
    //a到达终点!
    //b起跑...
    //b到达终点!
    //c起跑...
    //c到达终点!
    //比赛结束!

如何接返回值

function a(){//a异步
      return new Promise(function(resolve){
        var bang="接力棒";
        console.log(`a起跑...`);
        setTimeout(function(){//异步
          console.log(`a到达终点!`);
          //之后,主动调用resolve开门!
          resolve(bang);//自动执行.then()中串联的下一项任务
        },6000)
      })
    }
    function b(bang){//b异步
      return new Promise(function(resolve){
        console.log(`b起跑...`);
        setTimeout(function(){//异步
          console.log(`b到达终点!`);
          //之后,主动调用resolve
          resolve(bang); //通知.then中串联的下一项任务可以开始执行!
        },4000)
      })
    }
    function c(bang){//c异步
      return new Promise(function(resolve){
        console.log(`c起跑...`);
        setTimeout(function(){//异步: 在主程序之外
          console.log(`c到达终点!`);
          resolve(bang);
        },2000)
      })
    }
    //await等待前一个程序执行完,再执行当前程序
    (async function (){
      let bang = await a();
      bang = await b(bang);
      bang = await c(bang);
      console.log(`${bang}比赛结束!`)
    })()
    //a起跑...
    //a到达终点!
    //b起跑...
    //b到达终点!
    //c起跑...
    //c到达终点!
    //接力棒比赛结束!

如何抛出程序错误try{}catch(e){}

 function a(type){//a异步
        return new Promise(function(resolve,reject){
          if(type = 'makeMistake'){
            reject('makeMistake');
          }else{
            console.log(`a起跑...`);
            setTimeout(function(){//异步
              console.log(`a到达终点!`);
              //之后,主动调用resolve开门!
              resolve();//自动执行.then()中串联的下一项任务
            },6000)
          }
          
        })
      }
      function b(){//b异步
        return new Promise(function(resolve){
          console.log(`b起跑...`);
          setTimeout(function(){//异步
            console.log(`b到达终点!`);
            //之后,主动调用resolve
            resolve(); //通知.then中串联的下一项任务可以开始执行!
          },4000)
        })
      }
      function c(){//c异步
        return new Promise(function(resolve){
          console.log(`c起跑...`);
          setTimeout(function(){//异步: 在主程序之外
            console.log(`c到达终点!`);
            resolve();
          },2000)
        })
      }

    //await等待前一个程序执行完,再执行当前程序
    (async function (){
      try{
        let bang = await a('makeMistake');
        await b();
        await c();
        console.log(`比赛结束!`)
      }catch(error){
        console.error(error);//'makeMistake'
      }
    })()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值