问题从哪里开始
一个看似普通的接口超时,往往不是简单地把超时时间调大就能解决。真正需要确认的是:请求在哪一段停住、是否已经到达服务端,以及失败后能不能安全重试。
排查顺序
先记录请求开始时间、目标地址和响应状态。
再检查网关、应用服务和第三方接口的耗时分布。
最后区分只读请求与有副作用的写请求,避免重复提交。
const controller = new AbortController()
const timer = setTimeout(() => controller.abort(), 10_000)
const response = await fetch(url, { signal: controller.signal })
clearTimeout(timer)
最终结论
超时只是结果,不是原因。稳定的系统需要明确超时边界、限制重试次数,并为写操作提供幂等保护。这样即使网络不稳定,也不会把一次故障放大成重复发布。