Skip to content

中止与超时

AsyncLoader 支持主动中止与每次尝试的加载超时,二者通过内部信号穿透到底层请求。

每次尝试的超时

typescript
const loader = new AsyncLoader(
    (args) => fetch("/api/data", { signal: args.abortSignal }),
    { timeout: 5_000 }, // 每次尝试 5 秒超时
);

loader.abort(); // 中止正在进行的请求,穿透到底层 fetch

错误类型

超时与主动中止会产生不同类型的错误:

  • 超时最终失败(重试耗尽或未启用重试)→ reject TimeoutError
  • 主动 abort() / 外部 abortSignal → reject AbortError
  • 业务错误 → 透传原始错误

外部中止信号

通过 abortSignal 选项传入外部 AbortSignal,触发时联动中止加载,且不会触发重试

typescript
const controller = new AbortController();
const loader = new AsyncLoader(
    (args) => fetch("/api/data", { signal: args.abortSignal }),
    { abortSignal: controller.signal, retry: 3 },
);

controller.abort(); // 联动中止,不重试

主动 abort 不重试

无论是 loader.abort() 还是外部 abortSignal 触发的中止,都不会触发 自动重试;只有超时与业务错误才会重试。

基于 MIT 许可协议发布