Ich habe eine Funktion, die ein Versprechen zurückgibt, und ich versuche, darauf aus einer asynchronen Funktion zu erwarten. Das Problem ist, dass das Programm sofort abgeschlossen wird, anstatt auf das Versprechen zu warten.Knoten beendet vor async Funktion beendet
Asynchron-test.js:
function doItSlow() {
const deferred = new Promise();
setTimeout(() => {
console.log("resolving");
deferred.resolve();
}, 1000);
return deferred;
}
async function waitForIt(done) {
console.log("awaiting");
await doItSlow();
console.log("awaited");
done();
}
waitForIt(() => {
console.log("completed test");
});
console.log("passed by the test");
erstellen und auszuführen:
babel --stage 0 --optional runtime async-test.js > at.js && node at.js`
Ergebnis:
awaiting
passed by the test
Auflösen sofort anstelle einer Sekunde warten, hat keine Wirkung:
function doItSlow() {
const deferred = new Promise();
console.log("resolving");
deferred.resolve();
return deferred;
}
Interessanter
„Lösung“ wird nie gedruckt, obwohl es jetzt synchron ist:
awaiting
passed by the test
Ich würde ein Compiler Problem vermuten, aber ich überprüfte Babels Ausgang und sicher genug, es hat die synchrone Version kompilieren.
Ich dachte, ich könnte nur auf ein Versprechen aus einer asynchronen Funktion warten. Gibt es etwas, das mir hier fehlt?