```sh npm install --save extra-defer # or yarn add extra-defer ```
npm install extra-defersh
npm install --save extra-defer
or
yarn add extra-defer
`Usage
`ts
import { Destructor } from 'extra-defer'const destructor = new Destructor()
try {
const handle = open()
destructor.defer(() => handle.close())
// ...
} finally {
await destructor.execute()
}
`API
$3
`ts
class Constructor {
get size(): number constructor(options?: { autoClear?: boolean = true })
defer(callback: (...args: Args) => Awaitable): void
remove(callback: (...args: Args) => Awaitable): void
clear(): void
execute(...args: Args): Promise
executeSettled(...args: Args): Promise
all(concurrency: number = Infinity, ...args: Args): Promise
allSettled(concurrency: number = Infinity, ...args: Args): Promise
}
`Callbacks are executed in same order of
defer.$3
`ts
class Destructor {
get size(): number constructor(options?: { autoClear?: boolean = true })
defer(callback: (...args: Args) => Awaitable): void
remove(callback: (...args: Args) => Awaitable): void
clear(): void
execute(...args: Args): Promise
executeSettled(...args: Args): Promise
all(concurrency: number = Infinity, ...args: Args): Promise
allSettled(concurrency: number = Infinity, ...args: Args): Promise
}
`Callbacks are executed in reverse order of
defer.$3
`ts
class SyncConstructor {
get size(): number constructor(options?: { autoClear?: boolean = true })
defer(callback: (...args: Args) => unknown): void
remove(callback: (...args: Args) => unknown): void
clear(): void
execute(...args: Args): void
executeSettled(...args: Args): void
}
`Callbacks are executed in same order of
defer.$3
`ts
class SyncDestructor {
get size(): number constructor(options?: { autoClear?: boolean = true })
defer(callback: (...args: Args) => unknown): void
remove(callback: (...args: Args) => unknown): void
clear(): void
execute(...args: Args): void
executeSettled(...args: Args): void
}
`Callbacks are executed in reverse order of
defer.$3
`ts
type ICallback = (...args: Args) =>
| void
| Generatorclass GeneratorConstructor {
get size(): number
constructor(options?: { autoClear?: boolean = true })
defer(callback: ICallback): void
remove(callback: ICallback): void
clear(): void
execute(...args: Args): Generator
executeSettled(...args: Args): Generator
}
`Callbacks are executed in same order of
defer.$3
`ts
type ICallback = (...args: Args) =>
| void
| Generatorclass GeneratorDestructor {
get size(): number
constructor(options?: { autoClear?: boolean = true })
defer(callback: ICallback): void
remove(callback: ICallback): void
clear(): void
execute(...args: Args): Generator
executeSettled(...args: Args): Generator
}
`Callbacks are executed in reverse order of
defer.$3
`ts
type ICallback = (...args: Args) =>
| void
| Generator
| AsyncGeneratorclass AsyncGeneratorConstructor<
Yield = unknown
, Next = unknown
, Args extends unknown[] = []
> {
get size(): number
constructor(options?: { autoClear?: boolean = true })
defer(callback: ICallback): void
remove(callback: ICallback): void
clear(): void
execute(...args: Args): AsyncGenerator
executeSettled(...args: Args): AsyncGenerator
}
`Callbacks are executed in same order of
defer.$3
`ts
type ICallback = (...args: Args) =>
| void
| Generator
| AsyncGeneratorclass AsyncGeneratorDestructor {
get size(): number
constructor(options?: { autoClear?: boolean = true })
defer(callback: ICallback): void
remove(callback: ICallback): void
clear(): void
execute(...args: Args): AsyncGenerator
executeSettled(...args: Args): AsyncGenerator
}
`Callbacks are executed in reverse order of
defer`.