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
},
我想等待 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
},