Hyperlinkv0.8.0-beta.28

Queue

Queue.takeNconsteffect/Queue.ts:1304
<A, E>(self: Dequeue<A, E>, n: number): Effect<Array<A>, E>

Takes up to n messages from the queue.

Details

The operation may wait until enough messages are available to satisfy the queue's batching rules. If n is less than or equal to zero, it succeeds with an empty array. If the queue completes or fails before messages can be taken, the effect fails with the queue's terminal error.

Example (Taking a fixed number of values)

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

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

  // Add several messages
  yield* Queue.offerAll(queue, [1, 2, 3, 4, 5, 6, 7])

  // Take exactly 3 messages
  const first3 = yield* Queue.takeN(queue, 3)
  console.log(first3) // [1, 2, 3]

  // Take exactly 2 more messages
  const next2 = yield* Queue.takeN(queue, 2)
  console.log(next2) // [4, 5]

  // Take remaining messages
  const remaining = yield* Queue.takeN(queue, 2)
  console.log(remaining) // [6, 7]
})
taking
Source effect/Queue.ts:13044 lines
export const takeN = <A, E>(
  self: Dequeue<A, E>,
  n: number
): Effect<Array<A>, E> => takeBetween(self, n, n)