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

使用Axios发送GET请求返回undefined的问题求助

解决异步请求导致响应数据undefined的问题

嘿,这个问题我太熟了——本质是JavaScript异步代码的执行顺序在搞鬼!

你遇到的情况是:axios.get是异步操作,它不会卡住等待请求完成,而是直接继续执行后面的同步代码。所以你写的console.log("Data before sending is ")和response.send(data),会在axios还没从后端拿到数据的时候就先跑了,这时候data自然还是初始的undefined状态。

给你两种靠谱的解决方案:

方案1:把响应逻辑放到.then回调内部

直接将发送响应的代码移到axios请求成功的回调里,确保只有拿到数据后才执行响应操作:

router.get('/marketUpdates', ((request, response) => {
    console.log("market updates");
    axios.get('http://localhost:8082/marketUpdates')
        .then(function (axiosResponse) { // 注意这里变量名别和外层的response重名
            console.log("GET Response")
            console.log(axiosResponse.data);
            const data = axiosResponse.data;
            console.log("Data before sending is ")
            console.log(data);
            response.send(data); // 确保数据获取后再发送响应
        })
        .catch(function (error) {
            console.log("Error in fetching market updates");
            response.status(500).send("Failed to fetch market updates"); // 错误时也要返回响应,避免客户端挂起
        });
}))

方案2:用async/await简化异步逻辑(更推荐)

把路由处理函数改成async函数,用await等待axios请求完成,让异步代码看起来像同步代码,逻辑更清晰:

router.get('/marketUpdates', async ((request, response) => { // 标记为async函数
    console.log("market updates");
    try {
        const axiosResponse = await axios.get('http://localhost:8082/marketUpdates'); // await等待请求结果
        console.log("GET Response")
        console.log(axiosResponse.data);
        const data = axiosResponse.data;
        console.log("Data before sending is ")
        console.log(data);
        response.send(data);
    } catch (error) {
        console.log("Error in fetching market updates");
        response.status(500).send("Failed to fetch market updates");
    }
}))

核心原则就是:必须等异步请求完成、拿到数据之后,再执行发送响应的操作,不能让同步代码抢先执行。

内容的提问来源于stack exchange,提问作者blazerix

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:45:15