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

React中Axios.request使用async/await不等待问题求助

问题解决方法

核心问题是requestFetchData函数没有返回Axios请求的Promise,导致await无法等待请求完成,直接拿到了undefined。

修复步骤:

1. 修改requestFetchData函数

你需要让这个函数返回Axios请求的结果,有两种写法:

写法一:用async/await简化代码(推荐)

serverMgr.requestFetchData = async (service, args) => {
  let data = args
    ? JSON.stringify({
        "service": service,
        ...args 
      })
    : JSON.stringify({
        "service": service
      });

  let config = {
    method: 'post',
    maxBodyLength: Infinity,
    url: my_php_script_url,
    headers: { 
      'Content-Type': 'application/json'
    },
    data : data
  };

  try {
    // 用await等待Axios请求完成
    const response = await axios.request(config);
    return response.data;
  } catch (error) {
    console.log("ERROR requestFetchData: " + error);
    // 抛出错误让上层捕获,避免静默失败
    throw error;
  }
}

写法二:保留.then链式调用,但必须返回Promise

serverMgr.requestFetchData = async (service, args) => {
  // 前面的data和config代码不变

  // 关键:返回这个Promise链,否则函数默认返回undefined
  return axios.request(config)
    .then((response) => {
      return response.data;
    })
    .catch((error) => {
      console.log("ERROR requestFetchData: " + error);
      throw error;
    });
}

2. 优化App.js的错误处理(可选但建议)

在useEffect里加上错误捕获,避免数据异常时崩溃:

useEffect(() => {
  initSingleton()
    .then(async () => {
      try {
        let appointmentsResults = await getServerMgr().getFullData();
        // 先判断数据是否存在,再处理
        if (appointmentsResults) {
          let appointmentsListClean = removeEmptyAppointments(appointmentsResults);
          // 这里可以把处理后的数据存入state,比如setAppointments(appointmentsListClean)
        }
      } catch (err) {
        console.error('获取全量数据失败:', err);
      }
    })
    .catch(err => {
      console.error('初始化单例失败:', err);
    });
}, []);

为什么之前的代码不生效?

你之前的requestFetchData虽然标记了async,但内部调用axios.request()后没有返回这个Promise,所以函数执行完会默认返回一个resolved状态的Promise,值是undefined。getFullData里的await拿到undefined后,就直接执行后续逻辑了,而Axios请求还在后台进行,这就导致你看到的“没有等待请求完成”的现象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 05:12:51