Hyperlinkv0.8.0-beta.28

TxQueue

TxQueue.pollconsteffect/TxQueue.ts:720
<A, E>(self: TxDequeue<A, E>): Effect.Effect<Option.Option<A>>

Tries to take an item from the queue without blocking.

Example (Polling without blocking)

import { Effect, Option, TxQueue } from "effect"

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

  // Poll returns Option.none if empty
  const maybe = yield* TxQueue.poll(queue)
  console.log(Option.isNone(maybe)) // true

  yield* TxQueue.offer(queue, 42)
  const item = yield* TxQueue.poll(queue)
  console.log(Option.getOrNull(item)) // 42
})
combinators
Source effect/TxQueue.ts:72016 lines
export const poll = <A, E>(self: TxDequeue<A, E>): Effect.Effect<Option.Option<A>> =>
  Effect.gen(function*() {
    const state = yield* TxRef.get(self.stateRef)
    if (state._tag === "Done") {
      return Option.none()
    }

    const chunk = yield* TxChunk.get(self.items)
    const head = Chunk.head(chunk)
    if (Option.isNone(head)) {
      return Option.none()
    }

    yield* TxChunk.drop(self.items, 1)
    return Option.some(head.value)
  }).pipe(Effect.tx)