Hyperlinkv0.8.0-beta.28

Stream

Stream.onExitconsteffect/Stream.ts:9797
<E, R2>(
  finalizer: (
    exit: Exit.Exit<unknown, E>
  ) => Effect.Effect<unknown, never, R2>
): <A, R>(self: Stream<A, E, R>) => Stream<A, E, R | R2>
<A, E, R, R2>(
  self: Stream<A, E, R>,
  finalizer: (
    exit: Exit.Exit<unknown, E>
  ) => Effect.Effect<unknown, never, R2>
): Stream<A, E, R | R2>

Runs the provided finalizer when the stream exits, passing the exit value.

Example (Running a finalizer on exit)

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

const stream = Stream.make(1, 2, 3).pipe(
  Stream.onExit((exit) =>
    Exit.isSuccess(exit)
      ? Console.log("Stream completed successfully")
      : Console.log("Stream failed")
  )
)

Effect.runPromise(Effect.gen(function*() {
  yield* Stream.runCollect(stream)
}))
// Output:
// Stream completed successfully
Finalization
Source effect/Stream.ts:979712 lines
export const onExit: {
  <E, R2>(
    finalizer: (exit: Exit.Exit<unknown, E>) => Effect.Effect<unknown, never, R2>
  ): <A, R>(self: Stream<A, E, R>) => Stream<A, E, R | R2>
  <A, E, R, R2>(
    self: Stream<A, E, R>,
    finalizer: (exit: Exit.Exit<unknown, E>) => Effect.Effect<unknown, never, R2>
  ): Stream<A, E, R | R2>
} = dual(2, <A, E, R, R2>(
  self: Stream<A, E, R>,
  finalizer: (exit: Exit.Exit<unknown, E>) => Effect.Effect<unknown, never, R2>
): Stream<A, E, R | R2> => fromChannel(Channel.onExit(self.channel, finalizer)))