我刚刚读了一篇很棒的文章“ 发电机”,它清楚地强调了这个函数,这是一个用于处理生成器函数的辅助函数:
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
/await
实现 async
关键字的方式。所以问题是,如果是这样的话,那么 await
关键字和 yield
关键字到底有什么区别呢?await
总是把一些东西变成一个承诺,而 yield
没有这样的保证吗?这是我最好的猜测!
在本文中,您还可以看到 async
/await
与使用生成器的 yield
是如何相似的,在本文中,他描述了“生成”函数 ES7异步函数。