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

使用Axios获取的数据无法存入全局变量的问题求助

问题:Axios异步请求数据无法存入全局变量

我编写了一个使用Axios从reqres.in获取用户数据的函数,在函数内部用console.log可以正常查看数据,但无法将数据存入全局变量。以下是我的代码:

import "./style.css";
import axios from "axios";
let currentPage = 1;
let users = [];

// ***** Get Users from the Spisific Page *****
const getUsers = function (pageNumber) {
  const url = `https://reqres.in/api/users`;
  axios.get(url, { params: { pageNumber } }).then((res) => {
    for (let i = 0; i < res.data.data.length; i++) {
      users.push(res.data.data[i]);
    }
  });
};

问题根源及修复步骤

  • 参数名错误:reqres.in的分页参数是page,不是你写的pageNumber,这个错误会导致请求无法正确获取对应页码的用户数据,先把参数名修正。
  • 异步操作时机问题:Axios请求是异步的,then回调里的代码会在请求成功后才执行。如果你在调用getUsers()之后立刻访问users全局变量,此时请求还没完成,自然看不到填充后的数据。

修复后的代码示例(两种常用方式)

方式1:用async/await让请求同步化
import "./style.css";
import axios from "axios";
let currentPage = 1;
let users = [];

// 获取指定页码用户数据
const getUsers = async function (pageNumber) {
  const url = `https://reqres.in/api/users`;
  // 修正参数名为page
  const res = await axios.get(url, { params: { page: pageNumber } });
  // 用扩展运算符替代循环push,代码更简洁
  users.push(...res.data.data);
};

// 调用时需用await等待请求完成
async function init() {
  await getUsers(1);
  // 这里就能拿到填充后的users数据
  console.log(users);
}

init();
方式2:返回Promise,让调用者处理后续逻辑
import "./style.css";
import axios from "axios";
let currentPage = 1;
let users = [];

const getUsers = function (pageNumber) {
  const url = `https://reqres.in/api/users`;
  // 返回axios的Promise实例
  return axios.get(url, { params: { page: pageNumber } }).then((res) => {
    users.push(...res.data.data);
    // 可以返回更新后的users给调用者
    return users;
  });
};

// 调用示例:在then回调里操作已填充的users
getUsers(1).then(() => {
  console.log(users);
});

额外优化提示

如果需要多次调用getUsers加载多页数据,可以根据用户id做去重处理,避免重复添加相同用户。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 11:52:17