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

时间:2017-12-21 05:29:58

标签: javascript node.js express promise

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

})

1 个答案:

答案 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 }
}