Hyperlinkv0.8.0-beta.28

Queue

Queue.pollconsteffect/Queue.ts:1434
<A, E>(self: Dequeue<A, E>): Effect<Option.Option<A>>

Attempts to take one item from the queue without waiting.

Details

Returns Option.some when an item is immediately available. Returns Option.none when no item is available, when the queue is done, or when the immediate take observes a queue failure.

Example (Polling without blocking)

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

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

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

  // Add an item
  yield* Queue.offer(queue, 42)

  // Poll returns Option.some with the item
  const maybe2 = yield* Queue.poll(queue)
  console.log(Option.getOrNull(maybe2)) // 42
})
taking
Source effect/Queue.ts:143411 lines
export const poll = <A, E>(self: Dequeue<A, E>): Effect<Option.Option<A>> =>
  internalEffect.suspend(() => {
    const result = takeUnsafe(self)
    if (result === undefined) {
      return internalEffect.succeed(Option.none())
    }
    if (result._tag === "Success") {
      return internalEffect.succeed(Option.some(result.value))
    }
    return internalEffect.succeed(Option.none())
  })