快速入门
AsyncLoader 是基于 AsyncSignal 的异步数据加载器,封装「加载 + 缓存 + 中止 + 超时 + 重试 + 实例复用 + 错误兜底 + 多加载器」等能力——其中多加载器支持 fallback 备用容灾(主源失败自动切换到备用源)与 combine 多源合并(并发加载并聚合结果)。底层加载函数通过 args.abortSignal 接收合并后的中止信号,可直接传入 fetch 的 signal 选项。
最小示例
构造函数第一个参数是底层加载函数:
typescript
import { AsyncLoader } from "asyncsignal/loader";
// 构造函数第一个参数 loader 为底层加载函数
const loader = new AsyncLoader(async (args) => {
const r = await fetch("/api/data", { signal: args.abortSignal });
return await r.json();
});
const data = await loader.get(); // 获取结果(命中有效缓存则直接返回)
loader.abort(); // 中止加载AsyncLoader 需从子路径 asyncsignal/loader 导入(该入口含全部模块:asyncSignal + AsyncLoader;库已配置 sideEffects: false,未用部分会被 tree-shaking)。主入口 asyncsignal 仅含 asyncSignal 信号部分:
typescript
import { AsyncLoader } from "asyncsignal/loader";核心能力一览
- 自动/懒加载:
autostart默认true,构造即加载;设为false时首次get()才触发 - 缓存:
cache>0时按hash缓存结果,过期后get()自动重新加载 - 中止:
abort()借内部信号链路穿透到底层请求 - 每次尝试独立超时:
timeout>0为每次尝试设置超时,超时算作可重试的失败 - 失败自动重试:
retry>0对超时与业务错误自动重试;主动 abort 不重试 - 实例复用(multiplex):按
hash复用加载器实例,去重并发或重复加载 - 错误兜底:
defaultValue在最终失败时吞掉错误并 resolve 兜底值 - 同步加载:底层 loader 可返回
Promise<T>或同步值T - 多加载器:传入 loader 数组,按
multiLoaderStrategy实现fallback备用容灾或combine多源合并 - 静态工厂:
AsyncLoader.resolve(value)/AsyncLoader.reject(error)创建预置终态实例(不触发加载) - 加载状态查询:
isPending()/isFulfilled()/isRejected()