最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

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

IT培训 admin 7浏览 0评论

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

我有以下路由功能,但是在异步功能完成之前所有对此函数的调用都会退出,因此无法进行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')
  return { result: await response.json(), code: response.status }
}

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

我有以下路由功能,但是在异步功能完成之前所有对此函数的调用都会退出,因此无法进行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')
  return { result: await response.json(), code: response.status }
}
发布评论

评论列表 (0)

  1. 暂无评论