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

React Native iOS应用仅首次Fetch成功,后续请求超时求助

解决React Native 0.44 iOS首次请求成功后后续请求超时的问题

我之前在RN旧版本开发时也碰到过类似的网络请求阻塞问题,结合你的描述,给你几个针对性的排查和解决方向:

1. 强制关闭连接避免连接池阻塞

React Native 0.44的iOS网络层存在连接池复用的bug,当第一个请求的连接没有正确释放时,会占满连接池导致后续请求超时。你可以给每个fetch请求添加Connection: close头部,强制每次请求结束后关闭连接:

fetch(url, {
  headers: {
    'Connection': 'close'
  }
})
  .then((response) => response.json())
  .then((data) => console.log(data))
  .catch(err => console.log(err));

2. 调整请求执行顺序(并行改串行)

你的代码里在componentDidMount并行调用了fetchA和fetchB,旧版本RN的网络层对并行请求的处理可能存在问题。试试改成串行执行,用async/await写法更清晰:

async componentDidMount() {
  try {
    await this.fetchA(url);
    await this.fetchB(url);
  } catch (error) {
    console.error('请求出错:', error);
  }
}

async fetchA(url) {
  const response = await fetch(url);
  const responseData = await response.json();
  console.log('fetchA结果:', responseData);
}

async fetchB(url) {
  const response = await fetch(url);
  const responseData = await response.json();
  console.log('fetchB结果:', responseData);
}

3. 检查iOS ATS配置

虽然浏览器能正常访问接口,但RN的App Transport Security(ATS)限制可能更严格。你可以先临时关闭ATS测试(上线前一定要改回更安全的配置):
在项目的Info.plist文件中添加:

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSAllowsArbitraryLoads</key>
  <true/>
</dict>

如果是特定域名,建议配置NSExceptionDomains来允许该域名的请求,这样更符合苹果的审核要求。

4. 解决图片加载的缓存/连接问题

首次请求后的图片加载失败,大概率和网络连接阻塞有关,也可能是旧版本RN的图片缓存机制有问题。你可以试试:

  • 给图片URL添加随机参数,强制绕过缓存:${imageUrl}?t=${Date.now()}
  • 替换原生Image组件为react-native-fast-image,它的网络请求和缓存处理更稳定,能避免很多旧版本的坑。

5. 升级React Native版本(优先推荐)

React Native 0.44是非常老旧的版本了,很多网络层的bug在后续的版本中已经被修复。如果项目的依赖允许,建议升级到0.45及以上的稳定版本,这可能是最彻底的解决办法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:08:40