Hyperlinkv0.8.0-beta.28

TxQueue

TxQueue.offerAllconsteffect/TxQueue.ts:614
<A, E>(values: Iterable<A>): (
  self: TxEnqueue<A, E>
) => Effect.Effect<Array<A>>
<A, E>(self: TxEnqueue<A, E>, values: Iterable<A>): Effect.Effect<
  Array<A>
>

Offers multiple items to the queue, returning the items that were not accepted.

Details

Each item follows offer semantics: bounded queues retry while full, dropping queues reject new items when full, sliding queues evict old items to accept new items, and closing or done queues reject all items. This function mutates the original TxQueue by adding items according to the queue's strategy. It does not return a new TxQueue reference.

Example (Offering multiple values)

import { Effect, TxQueue } from "effect"

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

  // Offer multiple items - returns rejected items as array
  const rejected = yield* TxQueue.offerAll(queue, [1, 2, 3, 4, 5])
  console.log(rejected) // [] if all accepted
  console.log(rejected.length) // 0
})
combinators
Source effect/TxQueue.ts:61419 lines
export const offerAll: {
  <A, E>(values: Iterable<A>): (self: TxEnqueue<A, E>) => Effect.Effect<Array<A>>
  <A, E>(self: TxEnqueue<A, E>, values: Iterable<A>): Effect.Effect<Array<A>>
} = dual(
  2,
  <A, E>(self: TxEnqueue<A, E>, values: Iterable<A>): Effect.Effect<Array<A>> =>
    Effect.gen(function*() {
      const rejected: Array<A> = []

      for (const value of values) {
        const accepted = yield* offer(self, value)
        if (!accepted) {
          rejected.push(value)
        }
      }

      return rejected
    }).pipe(Effect.tx)
)