Hyperlinkv0.8.0-beta.28

Queue

Queue.takeconsteffect/Queue.ts:1396
<A, E>(self: Dequeue<A, E>): Effect<A, E>

Takes a single message from the queue, or wait for a message to be available.

Details

If the queue is done, it will fail with Done. If the queue fails, the Effect will fail with the error.

Example (Taking one value)

import { Cause, Effect, Queue } from "effect"

const program = Effect.gen(function*() {
  const queue = yield* Queue.bounded<string, Cause.Done>(3)

  // Add some messages
  yield* Queue.offer(queue, "first")
  yield* Queue.offer(queue, "second")

  // Take messages one by one
  const msg1 = yield* Queue.take(queue)
  const msg2 = yield* Queue.take(queue)
  console.log(msg1, msg2) // "first", "second"

  // End the queue
  yield* Queue.end(queue)

  // Taking from an ended queue fails with Done
  const result = yield* Effect.match(Queue.take(queue), {
    onFailure: (error: Cause.Done) => true,
    onSuccess: (value: string) => false
  })
  console.log("Queue ended:", result) // true
})
taking
Source effect/Queue.ts:13964 lines
export const take = <A, E>(self: Dequeue<A, E>): Effect<A, E> =>
  internalEffect.suspend(
    () => takeUnsafe(self) ?? internalEffect.andThen(awaitTake(self), take(self))
  )
Referenced by 6 symbols