ES6中async函数(一) 关于await

后端框架koa2中采用了async函数取代了前一代中的Generator函数,所以有必要对async函数进行进一步的理解。


首先应该明白async函数其实只是Generator函数的一个语法糖而已,对于Generator函数而言,他无法自执行,而需要自己来书写或导入执行器来帮助执行,而对于async函数来说,只需要想普通的同步函数一样调用即可,只是在书写函数时需要在开头加入async,而在内部需要进行异步操作的地方加上await。


注意:await后面要等待的是什么?
答:一个Promise对象
我们来看下面这个例子:

await后面不是Promise对象时
执行结果如下所示:
我们可以很清楚的发现,当await后面不是一个Promise对象时,那么他将不被await等待,若是一个异步操作,就会被加入异步队列。
执行结果
现在对代码稍作修改,将await后面的代码改成Promise对象的形式:
await后面是Promise对象时
执行结果如下所示:
执行结果
我们可以发现改成Promise对象后await就发挥作用了,这时async函数内部会等到await后面的Promise对象的状态变成resolved或是rejected时再进行下一步的操作。注意:若Promise对象内部操作结束后既没有调用resolve也没有调用reject函数,那么将一直处于pending状态,那么async函数也就一直停滞在await处不再向下执行,执行结果也就如下图所示了
Promise对象内部状态不发生改变时

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容