Skip to content

快速入门

AsyncLoader 是基于 AsyncSignal 的异步数据加载器,封装「加载 + 缓存 + 中止 + 超时 + 重试 + 实例复用 + 错误兜底 + 多加载器」等能力——其中多加载器支持 fallback 备用容灾(主源失败自动切换到备用源)与 combine 多源合并(并发加载并聚合结果)。底层加载函数通过 args.abortSignal 接收合并后的中止信号,可直接传入 fetchsignal 选项。

最小示例

构造函数第一个参数是底层加载函数:

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()

下一步

基于 MIT 许可协议发布