Package: effect
Module: Effect
Returns an effect that, if this effect starts execution, then the
specified finalizer is guaranteed to be executed, whether this effect
succeeds, fails, or is interrupted.
Details
For use cases that need access to the effect’s result, see onExit.
Finalizers offer very powerful guarantees, but they are low-level, and
should generally not be used for releasing resources. For higher-level
logic built on ensuring, see the acquireRelease family of methods.
Example (Always running cleanup)
import { Console, Effect } from "effect"
const task = Effect.gen(function*() {
yield* Console.log("Task started")
yield* Effect.sleep("1 second")
yield* Console.log("Task completed")
return 42
})
// Ensure cleanup always runs, regardless of success or failure
const program = Effect.ensuring(
task,
Console.log("Cleanup: This always runs!")
)
Effect.runPromise(program).then(console.log)
// Output:
// Task started
// Task completed
// Cleanup: This always runs!
// 42
Signature
declare const ensuring: { <X, R1>(finalizer: Effect<X, never, R1>): <A, E, R>(self: Effect<A, E, R>) => Effect<A, E, R1 | R>; <A, E, R, X, R1>(self: Effect<A, E, R>, finalizer: Effect<X, never, R1>): Effect<A, E, R1 | R>; }
Since v2.0.0