异步操作async await

时间:2019-11-27
本文章向大家介绍异步操作async await,主要包括异步操作async await使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

async函数的特点

  • 语义化强
  • 里面的await只能在async函数中使用
  • await后面的语句可以是promise对象、数字、字符串等
  • async函数返回的是一个Promsie对象
  • await语句后的Promise对象变成reject状态时,那么整个async函数会中断,后面的程序不会继续执行



例:

router.get('/testAsync',async (ctx)=>{
  global.console.log('start',new Date().getTime());
  const a = await new Promise((resolve,reject)=>{
    setTimeout(()=>{
      global.console.log('async a',new Date().getTime());
      resolve('a')
    },1000)
  });
  const b = await 123
  const c = await new Promise((resolve,reject)=>{
    setTimeout(()=>{
      global.console.log('async a',new Date().getTime());
      resolve('c')
    },2000)
  })
  ctx.body = {
    a,b,c
  };

})

看看代码的执行过程,它里面遇到了await, await 表示等待,代码就暂停到这里,不再向下执行了,它等待后面的promise对象执行完毕,然后拿到promise resolve 的值并进行返回,返回值拿到之后,它继续向下执行。具体到 我们的代码, 遇到await 之后,代码就暂停执行了, 等待后面promise执行完毕,暂停结束,代码继续执行。

怎么处理异常,如果请求发生异常,怎么处理?   

  它用的是try/catch 来捕获异常,把await 放到 try 中进行执行,如有异常,就使用catch 进行处理。

async getFaceResult () {
                try {
                    let location = await this.getLocation(this.phoneNum);
                    if (location.data.success) {
                        let province = location.data.obj.province;
                        let city = location.data.obj.city;
                        let result = await this.getFaceList(province, city);
                        if (result.data.success) {
                            this.faceList = result.data.obj;
                        }
                    }
                } catch(err) {
                    console.log(err);
                }
            }

原文地址:https://www.cnblogs.com/LChenglong/p/11941905.html