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