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 async
se implementa la palabra clave con async
/ await
. Entonces, la pregunta es, si ese es el caso, ¿cuál es la diferencia entre la await
palabra clave y la yield
palabra clave? ¿ await
Siempre convierte algo en una promesa, mientras yield
que no ofrece tal garantía? ¡Esa es mi mejor suposición!
También puede ver cómo async
/ await
es similar ayield
generadores en este artículo donde describe la función 'spawn' de las funciones asíncronas de ES7 .