关于async和await的理解!

使用async和await进行异步编程提高编译效率

看很多朋友还是使用的Thread来使用异步多线程操作,基本上看不见有使用Async、Await进行异步编程的。各有所爱吧,其实都可以。只要正确使用就行,不过还是写了这篇文章推荐大家使用Async、Await。 原因就是:可以跟写同步方法一样去异步编程。代码则就非常的清晰,就跟写普通的代码一样,不用关系如何去异步编程,也让很多初级程序员也能够异步编程了
接来下直接上代码来说明async和await如何使用?
在此,我不详细介绍了为什么异步编程能够促进编译效率,仅仅用文字说明一下,async的中文意思是异步的意思,当一个函数前面加一个async的时候,那么,在代码编译的过程中,此函数和下面的函数是同时执行的,不会等待此函数成功执行后再执行下面的函数。现在有如下场景:
比如我在后台要向另一台服务器中获取中的2个接口获取信息,然后将两个接口的信息拼接起来,一起输出,接口1耗时3s,接口2耗时5s,
① 传统的同步方式:
需要的时间大约为:3s + 5s =8s,

开启异步方式进行请求

需要的时间大约为:Max(3s,5s) = 5s

现在我们上代码:

async function testResult() {
    let second = await doubleAfter2seconds(50);
    let third = await doubleAfter2seconds(30);
    console.log( second + third);
}

5秒后,控制台输出160, 我们可以看到,写异步代码就像写同步代码一样了,再也没有回调地域了
**现在就还差一点需要说明,那就是怎么处理异常,如果请求发生异常,怎么处理? 它用的是try/catch 来捕获异常,把await 放到 try 中进行执行,如有异常,就使用catch 进行处理。**下面再次举个例子,即话费充值,当用户输入电话号码后,先查找这个电话号码所在的省和市,然后再根据省和市,找到可能充值的面值,进行展示
前端相关js代码如下:

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);
                }
            }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值