Nodejs 等待异步函数完成并打印结果

Nodejs wait till async function completes and print the results

我想等待 HTTP POST 请求完成,然后 return 响应调用函数。当我打印收到的结果时,我得到了 Undefined。

我定义了 post 方法如下:

// httpFile.js 
const axios = require('axios');

module.exports = {
    getPostResult: async function(params) {
        console.log("getPostResult async called...");
        var result = await axios.post("https://post.some.url", params)
        .then ((response) => {
            console.log("getPostResult async success");
            return {response.data.param};
        })
        .catch ((error) => { 
            console.log("getPostResult async failed");
            return {error.response.data.param};
        });
    }
}

我是这样称呼它的:

// someFile.js
const httpFile = require('./httpFile');

// Called on some ext. event
async function getPostResult() {  

   var params = {var: 1};
   var result = await httpFile.getPostResult(params);
   
   // Getting Undefined
   console.log("Done Result: " + JSON.stringify(result)); 
}

我不想在调用函数中处理 .then.catch,因为我想 return 基于 POST 结果的不同值。

我应该如何等待响应并获得 return 结果。
在上面的代码中,我得到了预期的日志语句,并且在 'getPostResult' returns.

之后的最后打印了“完成结果”

您同时使用 await.then 这就是为什么 returns 未定义。

这是它应该的样子

// httpFile.js
const axios = require('axios')

module.exports = {
  getPostResult: async function (params) {
    try {
      const res = await axios.post('https://post.some.url', params)
      return res.data
    } catch (error) {
      // I wouldn't recommend catching error, 
      // since there is no way to distinguish between response & error
      return error.response.data
    }
  },
}

如果你想在这个函数之外捕获错误,那么这是可行的方法。

 getPostResult: async function (params) {
      const res = await axios.post('https://post.some.url', params)
      return res.data
  },