在Node.js中如何等待单独函数的API响应后再继续执行代码?
核心错误原因
- 你的
login_user函数没有返回异步请求对应的Promise对象:axios.post本身会返回一个Promise,但你没有把它作为函数返回值抛出,所以login_user调用后默认返回undefined,外层加await也不会等待接口请求完成,会直接执行后续判断逻辑。 login_user的catch回调存在变量引用错误:catch回调接收的参数是错误对象error,你在catch里写的return response.status中的response在当前作用域不存在,请求失败时会直接抛出引用错误。
修复代码
第一步:修改authenticate.js的login_user函数
const axios = require('axios'); const querystring = require('querystring'); function login_user(username, password) { var data = { j_username: username, j_password: password }; // 新增return返回axios的Promise对象 return axios.post("https://fakeurl.com", querystring.stringify(data)) .then(function (response) { return response.status; }) .catch(function (error) { // 修复catch里的取值逻辑,从error对象中取响应状态码,无响应时默认返回500 return error.response ? error.response.status : 500; }); } module.exports = { login_user }
第二步:你已经修改的app.js async/await逻辑无需调整,可正常运行
const { login_user } = require('./authenticate'); // Other requirements // App initialization app.post('/auth', async function (req, res) { let username = req.body.username; let password = req.body.password; let response = await login_user(username, password); if (response == 204) { res.send("Success"); } else { res.send("Failure"); } });
内容的提问来源于stack exchange,提问作者gskn13
相关产品推荐
相关产品推荐

