Ho una funzione che restituisce una promessa e sto provando ad attenderla da una funzione asincrona. Il problema è che il programma viene completato immediatamente, invece di attendere la promessa.Il nodo esce prima che la funzione asincrona venga completata
asincrone-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");
costruire e gestire:
babel --stage 0 --optional runtime async-test.js > at.js && node at.js`
Risultato:
awaiting
passed by the test
Risolvere subito invece di aspettare che uno secondo non ha alcun effetto:
function doItSlow() {
const deferred = new Promise();
console.log("resolving");
deferred.resolve();
return deferred;
}
È interessante notare che, "risolvere" non viene mai stampato, anche se ora è sincrono:
awaiting
passed by the test
ho il sospetto un problema del compilatore, ma ho controllato l'output di Babel e abbastanza sicuro, ha fatto compilare la versione sincrona.
Pensavo di poter attendere una promessa da una funzione asincrona. C'è qualcosa che mi manca qui?