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

Postman可正常返回数据但React Native调用fetch报Failed to fetch错误如何解决

解决方案

  • 首先移除GET请求中的冗余body参数:HTTP规范不建议GET请求携带请求体,你代码中body: null属于无效配置,部分底层网络库处理带body的GET请求时,若返回数据量较大容易出现传输中断异常,删除该配置即可。
  • 新增响应状态校验与超时配置:你当前的代码没有提前判断HTTP响应状态合法性,也没有设置超时阈值,大响应传输过程中如果出现网络波动会直接抛出异常。修改后的参考代码如下:
let url = "API endpoint";

let headers = {
  Authorization: "working bearer token"
};

// 封装超时逻辑
const fetchWithTimeout = (url, options = {}, timeout = 30000) => {
  return new Promise((resolve, reject) => {
    const timer = setTimeout(() => {
      reject(new Error('Request timeout'));
    }, timeout);
    fetch(url, options)
      .then(res => {
        clearTimeout(timer);
        resolve(res);
      })
      .catch(err => {
        clearTimeout(timer);
        reject(err);
      });
  });
};

fetchWithTimeout(url, {
  method: "GET",
  headers: headers
})
  .then((response) => {
    // 先校验响应状态是否正常
    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`);
    }
    return response.json();
  })
  .then((data) => console.log(data))
  .catch((error) => {
    // 打印完整错误信息方便定位
    console.log('Error details:', error.message, error.stack);
  });
  • 若调整后仍有大响应失败问题,可更换更稳定的第三方网络库:React Native官方自带的fetch底层依赖原生端网络栈,部分旧版本对大体积响应的适配性较差,可替换为axios或者react-native-blob-util,两者默认对大响应的传输、解析做了兼容处理。
  • 原生层适配调整:
    • 安卓端(0.67及以下RN版本):可在原生层修改OkHttp配置,增大响应缓冲阈值,避免大响应传输时缓冲溢出中断。
    • iOS端:可在原生层将NSURLSession的超时时间调整至30s以上,匹配大响应的传输耗时。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 19:39:03