await的问题

await的问题

图片描述
为什么这里不加await则不会等待1秒钟,而加了await就会呢?wait函数里不是也有个setTimeout延时器吗?

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,解答如下:

1、先看下异步和同步的区别:异步不会阻塞程序往下执行,而同步会阻塞程序。

举个例子:

代码中要做两件事情A、B,二者顺序如下:

https://img1.sycdn.imooc.com//climg/63c8a31e092d0fc003330181.jpg

假设事情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)下面的代码才会开始执行,即定时器时间起到了作用。

祝学习愉快!

  • 慕勒8540250 提问者 #1

    await方法后面是不是只能跟异步函数,比如说用Promise写的,而不能跟普通函数?

    2023-01-19 15:55:46
  • 好帮手慕久久 回复 提问者 慕勒8540250 #2

    是的,需要跟异步,一般就是跟Promise写的异步。

    2023-01-19 16:08:35
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师