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

使用axios的函数无法返回值,如何获取目标数组?

解决axios异步请求导致函数无返回结果的问题

问题出在axios请求是异步操作:当你执行return arr时,axios的请求还没完成,then回调里的代码根本没执行,所以返回的是空数组。

有两种常用的解决方法:

方法一:使用async/await

把函数改成异步函数,用await等待axios请求完成后再处理数据并返回:

const myFunc = async (query) => {
    let arr = [];
    // 等待axios请求完成拿到响应
    const response = await axios({
        url: GRAPHQL_ENDPOINT,
        method: 'post',
        headers: headers,
        data: { query: query}
    });
    // 处理响应数据
    response.data.forEach(d => {
        arr.push(qs.parse(d.node.name));
    });
    return arr;
}

// 调用时需要用await(只能在async函数里用)或者.then接收结果
// 示例1:在async函数内调用
// async function fetchData() {
//   const result = await myFunc(myQuery);
//   console.log(result); // 这里拿到目标数组
// }
// fetchData();

// 示例2:用.then链式调用
myFunc(myQuery).then(result => {
    console.log(result); // 这里获取目标数组
});

方法二:让函数直接返回Promise

不用async/await的话,可以让函数直接返回axios的Promise,在then里处理数据并返回数组:

const myFunc = (query) => {
    return axios({
        url: GRAPHQL_ENDPOINT,
        method: 'post',
        headers: headers,
        data: { query: query}
    }).then((response) => {
        const arr = [];
        response.data.forEach(d => {
            arr.push(qs.parse(d.node.name));
        });
        return arr;
    });
}

// 调用时通过.then获取结果
myFunc(myQuery).then(result => {
    console.log(result); // 这里拿到目标数组
});

本质上两种方法都是利用Promise来处理异步逻辑,必须等axios请求完成后才能拿到处理好的数组,不能像同步代码那样直接返回结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 11:35:30