async函数的特色:promise
例: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执行完毕,暂停结束,代码继续执行。函数
怎么处理异常,若是请求发生异常,怎么处理? this
它用的是try/catch 来捕获异常,把await 放到 try 中进行执行,若有异常,就使用catch 进行处理。spa
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); } }