因为原生fetch不会仅因HTTP404而拒绝其Promise,所以收到404响应仍可进入then。网络错误、无效URL、取消和某些无效选项或策略限制等情况可能使原生fetch拒绝;404本身不触发这个条件;服务器返回 404 或 504 时,HTTP 响应已经到达,Promise 会兑现,then 拿到的是 Response 对象。这个结论的适用范围是浏览器原生 fetch,不适用于各框架对 fetch 的封装;封装可能自行改变拒绝条件,需要单独核对。

观察时应看两处:Response 的 status 是否为 404/504,ok 是否为 false;catch 是否根本没触发,还是 then 内部抛错或返回的后续 Promise 被拒绝后才触发。then 执行并不等于 HTTP 成功,更不等于响应体是完整文件或业务已经完成。对于 404,可能返回错误页、空内容或非预期格式;对于 504,也可能是网关返回的超时说明。若直接按成功分支解析 JSON、保存文件或更新界面,可能把错误页当业务数据,造成二次误判。
风险主要在阶段混淆。把 then 当成功,会漏掉非 2xx 状态;把 catch 当所有错误出口,会漏掉 HTTP 错误;对写请求在结果不明时重复提交,可能产生重复数据。下一步应保留原始响应状态和错误阶段:先判断 response.ok/status,非成功响应不能直接当目标业务数据,错误响应体另按接口约定处理;网络错误、坏 URL、取消等再走 catch;then 内主动抛出的业务异常要与网络异常分开记录。对未知结果的写请求不要直接重试,先确认是否已提交。开发人员可在获准公开的数据或隔离样本中复核请求是否原生 fetch、then 是否返回后续 Promise、catch 捕获的是哪一段异常。
赛罕区台式电脑用户可拨400-877-9605,先整理原生或封装实现、原响应状态和出错阶段,不重复提交结果未知的写请求。电脑快修网提供信息展示与第三方维修对接,实际地址、电脑侧检查是否支持及安排需当次核实,启用范围不代表即时履约。