我有以下路由功能,但是在异步功能完成之前所有对此函数的调用都会退出,因此无法进行then()或catch()调用以适当地响应HTTP请求。
在我的承诺完成之前,我如何使HTTP请求“保持/停止”?
router.post('/', (req, res) => {
// validate username and password
validateCredentials(req)
.then((msg) => {
res.send(`Success!`);
})
.catch((err) => {
res.status(500).send(err)
})
})
假设您在节点中使用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 }
}