Hyperlinkv0.8.0-beta.28

Effect

Effect.addFinalizerconsteffect/Effect.ts:6731
<R>(
  finalizer: (exit: Exit.Exit<unknown, unknown>) => Effect<void, never, R>
): Effect<void, never, R | Scope>

Adds a finalizer to the current scope.

When to use

Use to register low-level cleanup in the current scope.

Details

The finalizer runs when the surrounding scope is closed and receives the Exit value used to close the scope.

Example (Registering scope finalizers)

import { Console, Effect, Exit } from "effect"

const program = Effect.scoped(
  Effect.gen(function*() {
    // Add a finalizer that runs when the scope closes
    yield* Effect.addFinalizer((exit) =>
      Console.log(
        Exit.isSuccess(exit)
          ? "Cleanup: Operation completed successfully"
          : "Cleanup: Operation failed, cleaning up resources"
      )
    )

    yield* Console.log("Performing main operation...")

    // This could succeed or fail
    return "operation result"
  })
)

Effect.runPromise(program).then(console.log)
// Output:
// Performing main operation...
// Cleanup: Operation completed successfully
// operation result
resource managementacquireReleaseensuring
Source effect/Effect.ts:67313 lines
export const addFinalizer: <R>(
  finalizer: (exit: Exit.Exit<unknown, unknown>) => Effect<void, never, R>
) => Effect<void, never, R | Scope> = internal.addFinalizer
Referenced by 3 symbols