如何使HTTP请求等待响应的异步函数

问题描述 投票:0回答:1

我有以下路由功能,但是在异步功能完成之前所有对此函数的调用都会退出,因此无法进行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)
    })

})
javascript node.js express promise
1个回答
-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 }
}
© www.soinside.com 2019 - 2024. All rights reserved.