-
Notifications
You must be signed in to change notification settings - Fork 0
misc.Function.singleton
github-actions[bot] edited this page Jun 8, 2026
·
2 revisions
@zenstone/ts-utils / misc / singleton
singleton<
F>(factory): (...args) =>ReturnType<F>
Defined in: src/misc/singleton.ts:33
单例工厂
同步工厂返回 T,异步工厂返回 Promise。 异步分支内部处理并发竞态:多个并发调用只执行一次工厂,共享同一个 inflight Promise。
F extends (...args) => Promise<any>
F
工厂函数(同步或异步均可)
包装后的函数,首次调用执行工厂,后续调用直接返回缓存实例
(...args) => ReturnType<F>
同步
const getDb = singleton(() => new Database());
const db = getDb(); // 每次调用返回同一个实例异步
const getClient = singleton(async () => {
const client = new ApiClient();
await client.connect();
return client;
});
// 并发调用,只初始化一次
const [a, b] = await Promise.all([getClient(), getClient()]);
// a === bsingleton<
F>(factory): (...args) =>ReturnType<F>
Defined in: src/misc/singleton.ts:36
单例工厂
同步工厂返回 T,异步工厂返回 Promise。 异步分支内部处理并发竞态:多个并发调用只执行一次工厂,共享同一个 inflight Promise。
F extends AnyFn
F
工厂函数(同步或异步均可)
包装后的函数,首次调用执行工厂,后续调用直接返回缓存实例
(...args) => ReturnType<F>
同步
const getDb = singleton(() => new Database());
const db = getDb(); // 每次调用返回同一个实例异步
const getClient = singleton(async () => {
const client = new ApiClient();
await client.connect();
return client;
});
// 并发调用,只初始化一次
const [a, b] = await Promise.all([getClient(), getClient()]);
// a === b