多个接口同时返回 401

先理解原理和示例,再练习完整口述与追问。

single-flight 刷新;有限重放;统一退出;写操作语义。

并发 401 应共享一次刷新过程,其他请求排队等待结果。刷新本身失败必须统一结束等待者,避免永久挂起;成功后最多重放一次并更新认证信息。不同用户会话不能共用一个刷新锁,SSR 尤其需要限定作用域。

A、B、C 同时 401,A 创建 refreshPromise,B/C 等待;刷新成功后三者按允许策略重新请求。刷新失败则拒绝全部等待者,清理当前用户会话并统一跳登录,提示只显示一次。刷新接口不再走同一刷新递归,重放带标记防循环。

不是所有 401 都能通过刷新修复,403 也不能当过期处理。非幂等写请求需要服务端保证,不可一律自动重放。

我维护一个当前 refreshPromise,第一条认证失败请求启动刷新,其他认证失败请求等待它,避免并发刷新互相覆盖。刷新成功后更新凭证,每个原请求最多按策略重放一次;失败则统一清理状态并退出。刷新接口不再进入刷新逻辑。业务 403 不当成过期,写请求是否可重放必须看后端是否可能执行以及幂等机制,不能因为都是 401 就无限循环。