await的问题
为什么这里不加await则不会等待1秒钟,而加了await就会呢?wait函数里不是也有个setTimeout延时器吗?
21
收起
正在回答
1回答
同学你好,解答如下:
1、先看下异步和同步的区别:异步不会阻塞程序往下执行,而同步会阻塞程序。
举个例子:
代码中要做两件事情A、B,二者顺序如下:
假设事情A是同步执行的,那么事情A执行完,事情B才会开始执行(严格遵守从上往下的执行顺序)。如果事情A执行时间非常长,那么事情B就会一直处于等待状态,什么时候A完事,B才会开始,即A会阻塞程序往下执行B。
如果A是异步的,那么代码解析完A并开始执行A,B就会开始执行,即B不会等待A,A不会阻塞B的执行。此时会出现A执行的同时,B也在执行的情况。
2、await的作用是将“异步代码转成同步”。
wait方法是异步的,因为它里面是用Promise对象写的。如果不使用await,那么wait(1000)这句代码,并不会阻塞下面resolve(xhr.response)等代码的执行,即wait在定时器计时过程中,下面的代码就开始执行了,下面代码并不会等待计时器,所以计时器中的时间没用。
写了await后,就会把await方法当成同步处理。await方法执行的过程中,下面的代码会处于等待状态。await中的定时器时间到了,await中的代码才会执行完毕,此时await(1000)下面的代码才会开始执行,即定时器时间起到了作用。
祝学习愉快!
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星