我有以下路由功能,但是在异步功能完成之前所有对此函数的调用都会退出,因此它无法进行then()或catch()调用以适当地响应HTTP请求。
如何发出HTTP请求" hold / stall"直到我的承诺完成?
router.post('/', (req, res) => {
// validate username and password
validateCredentials(req)
.then((msg) => {
res.send(`Success!`);
})
.catch((err) => {
res.status(500).send(err)
})
})
答案 0 :(得分:-1)
假设您在节点中使用ES6,则可以使用async/await
。这将允许您等到请求完成后继续。
我使用fetch
作为我的例子。
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 }
}