iOS模拟器中React Native应用安装后Fetch仅首次可用,重启后请求失败
嘿,我之前也碰到过类似的棘手问题,结合社区里的常见排查思路,给你几个方向试试:
先确认网络连通性
重启模拟器后,先别急着打开APP,在模拟器的Safari里直接访问你的Render服务器API地址,看看能不能正常返回数据。如果Safari都打不开,那大概率是模拟器网络和服务器的连接出了问题——比如Render免费版服务长时间闲置会休眠,重启APP的请求刚好赶上它唤醒的间隙;或者模拟器的DNS解析出了问题,试试把请求地址里的域名换成服务器的公网IP再测试。完善Fetch的错误捕获和日志
你说去掉超时就会卡住,说明请求一直在等待响应但没收到结果。可以把错误处理写得更详细点,方便定位问题:try { const response = await fetch('你的服务器API地址', { method: 'GET', timeout: 10000, // 保留超时,避免无限等待 }); if (!response.ok) { throw new Error(`HTTP状态异常: ${response.status}`); } const data = await response.json(); // 处理数据逻辑 } catch (error) { console.error('请求失败完整信息:', error); // 这里可以给用户加个弹窗提示,或者重试机制 }看看控制台里的错误详情,除了“Network request failed”有没有更具体的提示,比如连接被拒绝、DNS失败之类的。
检查服务器的CORS和运行状态
确认Render服务器在你重启APP时是正常运行的,免费版服务如果15分钟没请求会自动休眠,第一次请求会唤醒,但后续如果间隔太久又会休眠,这时候重启APP的请求可能刚好卡在唤醒过程中。另外,跨域设置也可能导致这种情况,开发环境可以临时在服务器响应头里设置Access-Control-Allow-Origin: *,测试是否是跨域问题导致的请求失败。清理缓存或重置模拟器
有时候Expo的开发缓存会搞出奇怪的问题,试试用expo start --clear命令重启开发服务器,然后重新在模拟器上安装APP。如果还是不行,干脆重置模拟器的所有内容:打开模拟器顶部菜单的Hardware->Erase All Content and Settings,再重新安装测试。
内容来源于stack exchange

