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
相关产品推荐
相关产品推荐

