Skip to content

misc.Function.singleton

github-actions[bot] edited this page Jun 8, 2026 · 2 revisions

@zenstone/ts-utils / misc / singleton

Function: singleton()

Call Signature

singleton<F>(factory): (...args) => ReturnType<F>

Defined in: src/misc/singleton.ts:33

单例工厂

同步工厂返回 T,异步工厂返回 Promise。 异步分支内部处理并发竞态:多个并发调用只执行一次工厂,共享同一个 inflight Promise。

Type Parameters

F

F extends (...args) => Promise<any>

Parameters

factory

F

工厂函数(同步或异步均可)

Returns

包装后的函数,首次调用执行工厂,后续调用直接返回缓存实例

(...args) => ReturnType<F>

Examples

同步

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

Call Signature

singleton<F>(factory): (...args) => ReturnType<F>

Defined in: src/misc/singleton.ts:36

单例工厂

同步工厂返回 T,异步工厂返回 Promise。 异步分支内部处理并发竞态:多个并发调用只执行一次工厂,共享同一个 inflight Promise。

Type Parameters

F

F extends AnyFn

Parameters

factory

F

工厂函数(同步或异步均可)

Returns

包装后的函数,首次调用执行工厂,后续调用直接返回缓存实例

(...args) => ReturnType<F>

Examples

同步

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

Clone this wiki locally