defer.ts 328 B

123456789101112
  1. export function defer<T extends () => void | Promise<void>>(
  2. fn: T,
  3. ): T extends () => Promise<void> ? { [Symbol.asyncDispose]: () => Promise<void> } : { [Symbol.dispose]: () => void } {
  4. return {
  5. [Symbol.dispose]() {
  6. fn()
  7. },
  8. [Symbol.asyncDispose]() {
  9. return Promise.resolve(fn())
  10. },
  11. } as any
  12. }