给 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 次还失败,说明问题不在网络抖动,继续重试只会加重服务端的负担。