Я только что читал эту фантастическую статью « Генераторы », и в ней четко освещается эта функция, которая является вспомогательной функцией для обработки функций генератора:
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 .