2017-12-27 11 views
0

ich dieses einfache Beispiel zu meinem Controller haben und nicht wieNodeJS - Async/Await innen Controller

export let create = async (req: Request, res: Response) => { 

    console.log("START"); 
    await setTimeout(() => { 
     console.log("MIDDLE"); 
    }, 1000); 
    console.log("END"); 
    return res.json({ data: null }); 

}; 

Ausgang erwartet: START, END, MIDDLE

ERWARTEN: START, Mitte, Ende

+1

Und was erwarten Sie? –

+0

Ich denke, es ist offensichtlich .... START ... MIDDLE ... END – Michalis

+1

'setTimeout' gibt eine ** Nummer **, kein Versprechen. Nur wenn Sie ein Versprechen "erwarten", "wartet" die Ausführung tatsächlich. –

Antwort

2

Versuch:

await new Promise(resolve => setTimeout(resolve, 1000))

0

Sie verwenden setTimeOut ohne das Verspreungsobjekt zu erstellen, so dass es darauf wartet, dass der setTimeOut-Wert zurückgegeben wird (was sofort der Fall ist), anstatt auf eine Verheißungsauflösung zu warten. Dies ist der Grund, warum Ihre await-Anweisung nicht so funktioniert, wie sie beabsichtigt war. Was Sie brauchen, ist ein Versprechen zu erstellen:

function resolveAfterOneSecond(x) { 
    return new Promise(resolve => { 
    setTimeout(() => { 
     console.log("Middle"); 
     resolve(x); 
    }, 1000); 
    }); 
} 

async function f1() { 
    var x = await resolveAfterOneSecond(10); 
    console.log("End"); 
} 

console.log("Begin"); 
f1(); 

und setzen Sie Ihre Funktion, um die Rückkehr des Versprechens zu warten, anstatt die Rückkehr der setTimeOut Funktion integer.

Verwandte Themen