Hyperlinkv0.8.0-beta.28

Queue

Queue.clearconsteffect/Queue.ts:1171
<A, E>(self: Dequeue<A, E>): Effect<Array<A>, Pull.ExcludeDone<E>>

Takes and returns all currently buffered messages without waiting for more.

Details

Returns an empty array when the queue is empty or has completed normally. If the queue has failed, the effect fails with the queue's error.

Example (Clearing queued values)

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

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

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

  // Clear all messages from the queue
  const messages = yield* Queue.clear(queue)
  console.log(messages) // [1, 2, 3, 4, 5]

  // Queue is now empty
  const size = yield* Queue.size(queue)
  console.log(size) // 0

  // Clearing empty queue returns empty array
  const empty = yield* Queue.clear(queue)
  console.log(empty) // []
})
taking
Source effect/Queue.ts:117112 lines
export const clear = <A, E>(self: Dequeue<A, E>): Effect<Array<A>, Pull.ExcludeDone<E>> =>
  internalEffect.suspend(() => {
    if (self.state._tag === "Done") {
      if (Pull.isDoneCause(self.state.exit.cause)) {
        return internalEffect.succeed([])
      }
      return self.state.exit
    }
    const messages = takeAllUnsafe(self)
    releaseCapacity(self)
    return internalEffect.succeed(messages)
  })