Estaba leyendo este fantástico artículo « Generadores » y destaca claramente esta función, que es una función auxiliar para manejar las funciones del generador:
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);
}
}
}
que supongo que es más o menos la forma en que asyncse implementa la palabra clave con async/ await. Entonces, la pregunta es, si ese es el caso, ¿cuál es la diferencia entre la awaitpalabra clave y la yieldpalabra clave? ¿ awaitSiempre convierte algo en una promesa, mientras yieldque no ofrece tal garantía? ¡Esa es mi mejor suposición!
También puede ver cómo async/ awaites similar ayield generadores en este artículo donde describe la función 'spawn' de las funciones asíncronas de ES7 .