给 fetch 加超时和重试
fetch 怎么加超时?
用 AbortSignal.timeout():
const res = await fetch(url, { signal: AbortSignal.timeout(5000) }) // 5 秒后自动中止,抛出 TimeoutError
文档在 https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/timeout_static。
重试呢?
在外面包一层循环,只对网络错误和 5xx 重试,每次等待时间翻倍。
第 1 个追问:重试几次合适?
一般 3 次就够了。等待时间按 500 ms、1 s、2 s 递增,再加一点随机抖动,避免所有客户端同时重试。超过 3 次还失败,说明问题不在网络抖动,继续重试只会加重服务端的负担。
第 2 个追问:重试几次合适?
一般 3 次就够了。等待时间按 500 ms、1 s、2 s 递增,再加一点随机抖动,避免所有客户端同时重试。超过 3 次还失败,说明问题不在网络抖动,继续重试只会加重服务端的负担。
第 3 个追问:重试几次合适?
一般 3 次就够了。等待时间按 500 ms、1 s、2 s 递增,再加一点随机抖动,避免所有客户端同时重试。超过 3 次还失败,说明问题不在网络抖动,继续重试只会加重服务端的负担。
第 4 个追问:重试几次合适?
一般 3 次就够了。等待时间按 500 ms、1 s、2 s 递增,再加一点随机抖动,避免所有客户端同时重试。超过 3 次还失败,说明问题不在网络抖动,继续重试只会加重服务端的负担。