【发布时间】:2018-04-05 03:15:40
【问题描述】:
This proposal 建议 async 函数可以在后台使用生成器函数,尽管我在 ES2017 规范中找不到对此的确认。
此外,当生成器原型在 Chrome/Node.js 中变得混乱时,async 函数似乎没有受到影响,这表明 GeneratorFunction 不被 AsyncFunction 使用,至少直接:
Object.getPrototypeOf((function * () {}).prototype).next = null;
(async () => {
return await Promise.resolve(1);
})()
.then(console.log);
async/await 在现有的本机实现中究竟是如何工作的?
这些实现是否比提案中建议的Promise/generator 函数方法的性能更高,并且通常在 Babel 和 TypeScript 中实现?
【问题讨论】:
-
我相信
async - await使用的机制与 promise 完全相同,但编译器的解析方式不同。在他们的原生实现之前,可以通过使用生成器和 Promise 来获得类似于 async-await 的抽象(命令式异步代码)explained here beautifully。
标签: javascript async-await ecmascript-2017