文件不存在时点下载,按钮一直转圈,十秒后恢复原样,没有任何提示,用户以为网慢,连点七八次,日志里全是 404。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

const r = await fetch(url);
if ( ! r.ok ) { showError(`下载失败(${r.status}),请稍后重试`); return; }

前端只处理成功回调,失败分支留了空函数,请求 404 也当成功走完 loading。接口返回的错误信息没有传到页面。这一点先确认清楚,后面就不用反复试。

「下载失败提示」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。

备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。

具体做法是,fetch 后先判断 response.ok,非 2xx 走错误分支;错误提示带上状态码和文件大小信息,告诉用户是文件没了还是网络问题;把文件地址改成不存在的,确认页面弹出明确提示。

改完照着核一遍,请求不存在的文件时页面显示下载失败和 404,按钮恢复可点。

作者 9823189