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

如何禁用React Native请求超时 实现长耗时接口无超时调用

React Native 长请求超时解决方案

首先明确:React Native 自带的 fetch API 没有对外暴露超时配置项,无法直接禁用超时。你遇到的超时问题也不只是RN层的限制,还包含ngrok代理、移动端系统原生网络栈的默认超时限制,以下是可行的解决方案:

方案1:硬改超时配置适配8分钟长请求

如果你需要坚持用单次长连接等待服务端返回,按以下步骤调整:

  • 首先修改ngrok的超时限制:免费版ngrok默认请求超时为30秒,启动时添加超时参数即可调整,8分钟对应480秒,启动命令改为:
    ngrok http 5000 --request-timeout 480s
    
    付费版ngrok可以将参数设为--request-timeout 0实现无超时。
  • 替换原生fetch为axios发起请求,axios支持自定义超时时间,设为0即为无超时:
    1. 安装依赖:npm install axios
    2. 修改你的请求代码:
    import axios from 'axios'
    
    export default function App() {
      const [text,setText] = useState('')
      const [open,setOpen] = useState('')
      const [openrmse,setOpenrmse] = useState('')
      const [close,setClose] = useState('')
      const [closermse,setClosermse] = useState('')
      const [low,setLow] = useState('')
      const [lowrmse,setLowrmse] = useState('')
      const [high,setHigh] = useState('')
      const [highrmse,setHighrmse] = useState('')
      const [date,setDate] = useState('')
      
      const getData = async () => {
          console.log('http://127.0.0.1:5000/'+text);
          try {
           // timeout设为0即为无超时,也可显式设为480000对应8分钟
           const response = await axios.get('https://******.ngrok.io/'+text, { timeout: 0 });
           const json = response.data;
           setOpen(json.Open[0]);
              setOpenrmse(json.Open[1]);
              setClose(json.Close[0])
              setClosermse(json.Close[1]);
              setLow(json.Low[0]);
              setLowrmse(json.Low[1]);
              setHigh(json.High[0]);
              setHighrmse(json.High[1]);
              setDate(json.time);
         } catch (error) {
           console.error(error);
         }
      }
    }
    
  • (可选)如果调整后还是超时,需要修改原生端的默认网络超时:
    • Android端:找到项目下的android/app/src/main/java/[你的包名]/MainApplication.java,修改OkHttp初始化配置,将连接、读写超时都设为480秒
    • iOS端:打开项目ios/[你的项目名]/Info.plist,添加NSURLSession相关的超时配置,把默认超时调整为480秒

方案2:改用异步轮询模式(更推荐)

8分钟的长请求稳定性极低,很容易因为用户切后台、网络波动、系统资源回收等原因中断,建议改为异步任务模式,无需修改任何超时配置:

  1. 前端发起请求后,Flask服务端不需要同步等待处理完成,直接返回唯一的任务ID,立刻结束本次请求
  2. 前端拿到任务ID后,每隔10秒发起一次短请求查询任务处理状态
  3. 服务端处理完任务后,将结果存入缓存,当前端轮询到处理完成的状态时,直接返回最终结果
  4. 前端拿到结果后更新状态,结束轮询

这种方案稳定性远高于长连接,就算中间出现网络中断,重连后也可以继续查询任务进度,不需要重新触发8分钟的计算任务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 05:15:03