Hyperlinkv0.8.0-beta.28

TxQueue

TxQueue.clearconsteffect/TxQueue.ts:1298
<A, E>(self: TxEnqueue<A, E>): Effect.Effect<Array<A>, ExcludeDone<E>>

Removes and returns all currently buffered elements without changing the queue state.

Details

If the queue is already done with a Cause.Done error, returns an empty array. If the queue is done for any other cause, including interruption or failure, that cause is propagated.

Example (Clearing queues)

import { Effect, TxQueue } from "effect"

const program = Effect.gen(function*() {
  const queue = yield* TxQueue.bounded<number>(10)
  yield* TxQueue.offerAll(queue, [1, 2, 3, 4, 5])

  const sizeBefore = yield* TxQueue.size(queue)
  console.log(sizeBefore) // 5

  const cleared = yield* TxQueue.clear(queue)
  console.log(cleared) // [1, 2, 3, 4, 5]

  const sizeAfter = yield* TxQueue.size(queue)
  console.log(sizeAfter) // 0
})
combinators
Source effect/TxQueue.ts:129814 lines
export const clear = <A, E>(self: TxEnqueue<A, E>): Effect.Effect<Array<A>, ExcludeDone<E>> =>
  Effect.gen(function*() {
    const state = yield* TxRef.get(self.stateRef)
    if (state._tag === "Done") {
      // Return empty array only for halt causes (like Cause.Done)
      if (isDoneCause(state.cause)) {
        return []
      }
      return yield* Effect.failCause(state.cause)
    }
    const chunk = yield* TxChunk.get(self.items)
    yield* TxChunk.set(self.items, Chunk.empty())
    return Chunk.toArray(chunk)
  }).pipe(Effect.tx)
Referenced by 1 symbols