You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 16:39:01