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

React Native中async函数返回值获取异常问题求助

问题分析与解决

你代码里存在几个核心问题,直接导致了返回值异常和日志无输出:

  1. Fetch未处理HTTP错误状态
    fetch仅在网络请求彻底失败(如断网)时才会触发reject,像404、500这类HTTP错误码不会让fetch抛出异常。哪怕服务器返回错误内容,你的代码仍会执行response.json(),如果返回的不是合法JSON,就会触发catch,但此时函数无返回值,最终返回undefined。

  2. Catch块未处理返回逻辑
    如果response.json()解析失败,你的catch块仅打印日志,但未返回任何值或重新抛出错误,导致getPubsFromDatabase默认返回undefined。

  3. 自执行Async函数未捕获错误
    若getPubsFromDatabase内部出错,自执行函数没有try-catch兜底,错误会被静默吞掉,导致console.log(locationsData)根本不会执行。


修正后的代码

修复数据获取函数

getPubsFromDatabase = async () => {
  try {
    const response = await fetch(fetchDataUrl, {
      method: 'POST',
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
      },
    });

    // 先校验HTTP状态是否正常
    if (!response.ok) {
      throw new Error(`请求失败:${response.status}`);
    }

    const json = await response.json();
    console.log(json);
    return json;
  } catch (error) {
    console.error('获取酒吧数据出错:', error);
    // 可选:返回默认值(如空数组)或重新抛出错误让调用方处理
    // return [];
    throw error;
  }
};

修复自执行调用逻辑

(async () => {
  try {
    const locationsData = await getPubsFromDatabase();
    console.log(locationsData);
  } catch (error) {
    console.error('数据处理出错:', error);
  }
})();

关键说明

  • 新增response.ok检查:确保服务器返回2xx状态码,避免解析错误响应内容。
  • Catch块补充返回/抛错逻辑:避免函数静默返回undefined,让调用方能感知错误。
  • 自执行函数加try-catch:防止内部错误被静默吞掉,便于排查问题。

内容的提问来源于stack exchange,提问作者Mert Kalender Student

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 23:15:33