Właśnie czytałem ten fantastyczny artykuł « Generatory » i wyraźnie podkreśla tę funkcję, która jest funkcją pomocniczą do obsługi funkcji generatora:
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);
}
}
}
co, jak zakładam, jest mniej więcej sposobem async
zaimplementowania słowa kluczowego z async
/ await
. Więc pytanie brzmi, jeśli tak jest, to jaka jest różnica między await
słowem kluczowym a yield
słowem kluczowym? Czy await
zawsze zmienia coś w obietnicę, a yield
nie daje takiej gwarancji? To moje najlepsze przypuszczenie!
Możesz również zobaczyć, jak async
/ await
jest podobne do yield
generatorów w tym artykule, w którym opisuje on funkcję „spawn”, funkcje asynchroniczne ES7 .