中止与超时
AsyncLoader 支持主动中止与每次尝试的加载超时,二者通过内部信号穿透到底层请求。
每次尝试的超时
typescript
const loader = new AsyncLoader(
(args) => fetch("/api/data", { signal: args.abortSignal }),
{ timeout: 5_000 }, // 每次尝试 5 秒超时
);
loader.abort(); // 中止正在进行的请求,穿透到底层 fetch错误类型
超时与主动中止会产生不同类型的错误:
- 超时最终失败(重试耗尽或未启用重试)→ reject
TimeoutError - 主动
abort()/ 外部abortSignal→ rejectAbortError - 业务错误 → 透传原始错误
外部中止信号
通过 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 触发的中止,都不会触发 自动重试;只有超时与业务错误才会重试。