【发布时间】:2016-07-11 19:58:29
【问题描述】:
我刚刚阅读了这篇精彩的文章 «Generators»,它清楚地突出了这个函数,它是一个用于处理生成器函数的辅助函数:
function async(makeGenerator){
return function () {
var generator = makeGenerator.apply(this, arguments);
function handle(result){
// result => { done: [Boolean], value: [Object] }
if (result.done) return Promise.resolve(result.value);
return Promise.resolve(result.value).then(function (res){
return handle(generator.next(res));
}, function (err){
return handle(generator.throw(err));
});
}
try {
return handle(generator.next());
} catch (ex) {
return Promise.reject(ex);
}
}
}
我假设或多或少是 async 关键字与 async/await 实现的方式。所以问题是,如果是这样的话,那么到底是什么await 关键字和 yield 关键字之间的区别是什么? await 是否总是将某事变成承诺,而 yield 没有做出这样的保证?这是我最好的猜测!
您还可以在本文中看到 async/await 与带有生成器的 yield 的相似之处,其中他描述了“生成”函数 ES7 async functions。
【问题讨论】:
-
异步函数 -> 一个协程。生成器 -> 迭代器,它使用协程来管理其内部迭代机制。 await 挂起协程,而 yield 从某个生成器使用的协程返回结果
-
async/await不是 ES7 的一部分。请阅读标签说明。 -
@david haim,是的,但是异步等待是建立在生成器之上的,所以它们并不明显
标签: javascript node.js ecmascript-6 generator ecmascript-next