UNPKG

@gameye/sdk

Version:
22 lines (18 loc) 586 B
export type Destructor = () => void | PromiseLike<void>; export interface Destructable { destroy: Destructor; } export type Usable<TDestructable extends Destructable> = TDestructable | PromiseLike<TDestructable>; export async function use<TResult, TDestructable extends Destructable>( usable: Usable<TDestructable>, job: (destructable: TDestructable) => TResult, ): Promise<TResult> { const destructable = await usable; try { const result = await job(destructable); return result; } finally { await destructable.destroy(); } }