Hyperlinkv0.8.0-beta.28

Effect

Effect.onExitconsteffect/Effect.ts:6941
<A, E, XE = never, XR = never>(
  f: (exit: Exit.Exit<A, E>) => Effect<void, XE, XR>
): <R>(self: Effect<A, E, R>) => Effect<A, E | XE, R | XR>
<A, E, R, XE = never, XR = never>(
  self: Effect<A, E, R>,
  f: (exit: Exit.Exit<A, E>) => Effect<void, XE, XR>
): Effect<A, E | XE, R | XR>

Ensures that a cleanup function runs whether this effect succeeds, fails, or is interrupted.

Example (Observing every exit)

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

const task = Effect.succeed(42)

const program = Effect.onExit(task, (exit) =>
  Console.log(
    Exit.isSuccess(exit)
      ? `Task succeeded with: ${exit.value}`
      : `Task failed: ${Exit.isFailure(exit) ? exit.cause : "interrupted"}`
  ))

Effect.runPromise(program).then(console.log)
// Output:
// Task succeeded with: 42
// 42
resource management
Source effect/Effect.ts:69419 lines
export const onExit: {
  <A, E, XE = never, XR = never>(
    f: (exit: Exit.Exit<A, E>) => Effect<void, XE, XR>
  ): <R>(self: Effect<A, E, R>) => Effect<A, E | XE, R | XR>
  <A, E, R, XE = never, XR = never>(
    self: Effect<A, E, R>,
    f: (exit: Exit.Exit<A, E>) => Effect<void, XE, XR>
  ): Effect<A, E | XE, R | XR>
} = internal.onExit
Referenced by 7 symbols