现在点击确定按钮,可以看到页面中输出了从后台返回的面值列表。这时你看到了then的链式写法,有一点回调地域的感觉。现在我们在有async/ await来改造一下。
首先把getFaceResult转化成一个async函数,就是在其前面加async,因为它的调用方法和普通函数的调用方法是一致,所以没有什么问题。然后就把getLocation和getFaceList放到await后面,等待执行, getFaceResult 函数修改如下
// 点击确定按钮时,获取面值列表 async getFaceResult () { 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; } } }
现在代码的书写方式,就像写同步代码一样,没有回调的感觉,非常舒服。
现在就还差一点需要说明,那就是怎么处理异常,如果请求发生异常,怎么处理?它用的是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); } }
现在把服务器停掉,可以看到控制台中输出net Erorr,整个程序正常运行。