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

  • Post author:
  • Post category:其他

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'
      }
    })()

版权声明:本文为limuzhixing原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。