networkTimeout 必须在 manifest.json 源码视图中与 "name"、"appid" 同级配置,大小写敏感且需完整 JSON 格式;修改后须重启开发服务,局部 timeout 优先级更高,但 H5 不中断原生请求,超时判断需多条件兼容。

networkTimeout 必须写在 manifest.json 源码视图里
manifest.json 的可视化配置页不支持 networkTimeout,改了也没用。必须点左下角「源码视图」,手动编辑 JSON。它和 "name"、"appid" 同级,不是嵌套在 "h5" 或 "mp-weixin" 里。
常见错误包括:
• 写成 networktimeout(大小写敏感)
• 漏掉外层大括号,直接写 "request": 10000
• 放在 "h5" 对象内部(无效位置)
• 用中文引号或逗号缺失导致 JSON 解析失败
正确写法示例:
"name": "my-app",
"appid": "__UNI__XXXXXXX",
"networkTimeout": {
"request": 10000,
"uploadFile": 60000,
"downloadFile": 60000
}
修改后必须重启整个开发服务
networkTimeout 是编译期读取的全局兜底配置,热重载不生效。改完 manifest.json 后,要彻底关掉 HBuilderX 或命令行里的 npm run dev:h5 进程,再重新启动。
否则你会看到:明明写了 "request": 5000,但请求还是卡满默认的 60 秒才 fail —— 实际是旧配置还在内存里跑。
顺带提醒:
• iOS 真机上实际超时可能比设的值多 1–2 秒(底层 NSURLSession 行为)
• H5 平台该配置仅作提示用,不中断浏览器原生 fetch 请求
局部 timeout 优先级高于 networkTimeout
只要你在 uni.request 里显式传了 timeout 参数,比如 timeout: 3000,那这个请求就完全无视 networkTimeout.request 的值。
注意几个硬限制:
• timeout 必须是数字,不能是字符串 "3000" 或 null
• 它只对当前这一次请求生效,不会污染其他请求
• uni.uploadFile 不支持 timeout 参数,得换成 uni.request 手动实现上传逻辑
H5 下尤其要注意:即使写了 timeout: 3000,浏览器仍可能继续发请求,fail 回调只是“通知你超了”,不是真正中断连接。
fail 回调里判断超时不能只认 'request:fail timeout'
不同平台返回的错误字符串不统一:
• 微信小程序和 Android 大部分情况返回 errMsg === 'request:fail timeout'
• H5 常走 success 回调,但 res.statusCode === 0
• iOS 真机偶尔报 request:fail abort 或 request:fail net::ERR_CONNECTION_TIMED_OUT
所以健壮的超时处理应该:
• 同时检查 fail 回调的 errMsg 是否含 'timeout' 或 'abort'
• 在 success 回调里加 if (res.statusCode === 0) 判定网络异常
• 避免只依赖单一字符串匹配
真正容易被忽略的是:iOS 上 Connection: close 响应头可能触发假 timeout,实际是服务端主动断连,不是网络问题。这点查日志才能确认。


















