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