发表于: 2019-11-20 23:19:33

1 967


今日完成的事

学习了es6语法

明日计划的事

      调试接口,继续复习

收获

     Async/await是基于promise的,可以总结为一句话:async/await是一对好基友,缺一不可,他们的出生是为Promise服务的,是为了解决大量复杂不易读的Promise异步的问题,才出现的改良版。

async声明的函数的返回本质上是一个Promise。

什么意思呢?就是说你只要声明了这个函数是async,那么内部不管你怎么处理,它的返回肯定是个Promise。

看下列例子:

你会发现返回是这个:Promise {<resolved>: "我是Promise"}。

自动解析成Promise.resolve('我是Promise');

等同于:

像一般function的返回那样,拿到返回值,原来的思维要改改了!你可以这样拿到返回值:

像对待Promise一样去对待async的返回值


await的本质是可以提供等同于”同步效果“的等待异步返回能力的语法糖。

await顾名思义就是等待一会,只要await声明的函数还没有返回,那么下面的程序是不会去执行的!!!。这就是字面意义的等待一会(等待返回再去执行)。

这测试一下,你会发现输出是这个:输出 undefined。这是为什么呢?这也是要想强调的一个地方!!!

在demo函数里面都没声明返回,哪来的then?所以正确写法是这样:

带上then,规范一点,当然没有返回也是没问题的,demo会照常执行。下面这种写法是不带返回值的写法:

可以发现,只要用await声明的异步返回,是必须“等待”到有返回值的时候,代码才继续执行下去。

并没有await啊?setTimeout是异步啊,问题在哪?问题就在于setTimeout这是个异步,但是不是Promise!起不到“等待一会”的作用。

所以更准确的说法应该是用await声明的Promise异步返回,必须“等待”到有返回值的时候,代码才继续执行下去。

请记住await是在等待一个Promise的异步返回

当然这种等待的效果只存在于“异步”的情况,



返回列表 返回列表
评论

    分享到