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 asynczaimplementowania słowa kluczowego z async/ await. Więc pytanie brzmi, jeśli tak jest, to jaka jest różnica między awaitsłowem kluczowym a yieldsłowem kluczowym? Czy awaitzawsze zmienia coś w obietnicę, a yieldnie daje takiej gwarancji? To moje najlepsze przypuszczenie!
Możesz również zobaczyć, jak async/ awaitjest podobne do yieldgeneratorów w tym artykule, w którym opisuje on funkcję „spawn”, funkcje asynchroniczne ES7 .