Ich habe gerade diesen fantastischen Artikel « Generatoren » gelesen und er hebt diese Funktion deutlich hervor, die eine Hilfsfunktion für die Handhabung von Generatorfunktionen ist:
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);
}
}
}
Ich gehe davon aus, dass das asyncSchlüsselwort mehr oder weniger mit async/ implementiert wird await. Die Frage ist also, wenn dies der Fall ist, was zum Teufel ist dann der Unterschied zwischen dem awaitSchlüsselwort und dem yieldSchlüsselwort? Wird awaitaus etwas immer ein Versprechen, während yieldes keine solche Garantie gibt? Das ist meine beste Vermutung!
Sie können auch sehen, wie async/ mit Generatoren awaitähnlich ist, yieldin diesem Artikel, in dem er die asynchronen Funktionen der ' Spawn' -Funktion ES7 beschreibt .