2017-12-21 4 views
0

Ich habe die folgende Route-Funktion, aber alle Aufrufe dieser Funktion beendet, bevor die asynchrone Funktion abgeschlossen ist, so kann es einen then() oder catch() Anruf zu reagieren die HTTP-Anfrage entsprechend.Wie HTTP-Anfrage auf asynchrone Funktion für die Antwort

Wie mache ich die HTTP-Anfrage "halten/anhalten", bis mein Versprechen abgeschlossen ist?

router.post('/', (req, res) => { 

    // validate username and password 
    validateCredentials(req) 
    .then((msg) => { 
     res.send(`Success!`); 
    }) 
    .catch((err) => { 
     res.status(500).send(err) 
    }) 

}) 
+2

Dieser Code ist in Ordnung. Entweder stimmt etwas nicht mit dem Code, der die Anfrage ausführt, oder etwas stimmt nicht mit der Implementierung von validateCredentials. Bitte postet diesen Code. Erhalten Sie die erwartete 'msg'? – Bergi

+0

Fügen Sie auch 'validateCredentials' hinzu. Um besser zu verstehen, was Sie in dieser Funktion getan haben. –

Antwort

-1

Angenommen, Sie ES6 in Knoten verwenden, können Sie async/await verwenden. Dadurch können Sie warten, bis die Anfrage beendet ist, um weiter zu machen.

Ich habe fetch für mein Beispiel verwendet.

router.post('/', async (req, res) => { 
    // validate username and password 
    let response = await validateCredentials(req) 
    if (response.code != 200) { 
    return res.status(500).send(err) 
    } 
    res.send(response.result) 
}) 

async function validateCredentials() { 
    let response = await fetch('http://example.com') 
    return { result: await response.json(), code: response.status } 
} 
+1

Wie hilft das überhaupt? –

Verwandte Themen