我刚刚阅读了这篇精彩的文章 « 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
相似之处,他在其中描述了“生成”函数ES7 异步函数。yield