如何使http请求在路由内返回其响应

时间:2020-04-26 02:05:49

标签: node.js express http

我有一条路线,我想获取提供给它的数据并在http请求中发送它,并在我的路线中返回响应。我所做的是,我拥有此调用函数,该函数可以发送http请求并返回响应

async function call() {
    axios
    .post("https://jsonplaceholder.typicode.com/posts", {
      title: "foo",
      body: "bar",
      userId: 1,
    })
    .then((res) => {
      return { answer: 30 };
    })
    .catch((error) => {
      console.error(error);
    });
}

我试图在路由中调用它,但是它没有等待http请求完成。

2 个答案:

答案 0 :(得分:1)

如果您试图让call()的呼叫者能够等待您的axios结果,那么您需要做两件事:

  1. 您需要返回axios.post()的承诺
  2. 您的呼叫者需要对该返回的诺言使用.then()await
  3. 别在您的.catch()中吃错了。如果您.catch()只是为了登录并且仍然希望拒绝返回给调用者,则必须重新抛出该错误。在这种情况下,呼叫者似乎应该捕获并记录错误。

这是执行这些操作的代码:

function call() {
    return axios.post("https://jsonplaceholder.typicode.com/posts", {
      title: "foo",
      body: "bar",
      userId: 1,
    }).then((res) => {
      return { answer: 30 };
    });
}

call().then(result => {
    console.log(result);
}).catch(err => {
    console.log(err);
});

此外,这里没有理由使用asyncasync没有魔力知道何时完成函数内的异步操作。您仍然必须返回承诺或对每个承诺使用await。在这种情况下,由于您没有使用await,因此没有理由使用async,因此我将其删除,因为您只需返回您的一个承诺即可。

答案 1 :(得分:0)

我更喜欢@ jfriend00的答案,但这是使用async / await的答案

async function over() {
  async function call() {
    return await axios
      .post('https://jsonplaceholder.typicode.com/posts', {
        title: 'foo',
        body: 'bar',
        userId: 1,
      })
      .then((res) => {
        return { answer: 30 };
      })
      .catch((error) => {
        console.error(error);
      });
  }

  let result = await call();
  console.log(result);
}

over();