Hyperlinkv0.8.0-beta.28

TxDeferred

TxDeferred.doneconsteffect/TxDeferred.ts:217
<A, E>(result: Result<A, E>): (
  self: TxDeferred<A, E>
) => Effect.Effect<boolean>
<A, E>(
  self: TxDeferred<A, E>,
  result: Result<A, E>
): Effect.Effect<boolean>

Completes the deferred with a Result. Returns true if this was the first completion, false if already completed.

When to use

Use to complete a TxDeferred with an already computed Result.

Example (Completing with a result)

import { Effect, Result, TxDeferred } from "effect"

const program = Effect.gen(function*() {
  const deferred = yield* TxDeferred.make<number, string>()
  const first = yield* TxDeferred.done(deferred, Result.succeed(42))
  console.log(first) // true
  const second = yield* TxDeferred.done(deferred, Result.succeed(99))
  console.log(second) // false
})
mutations
export const done: {
  <A, E>(result: Result<A, E>): (self: TxDeferred<A, E>) => Effect.Effect<boolean>
  <A, E>(self: TxDeferred<A, E>, result: Result<A, E>): Effect.Effect<boolean>
} = dual(
  2,
  <A, E>(self: TxDeferred<A, E>, result: Result<A, E>): Effect.Effect<boolean> =>
    TxRef.modify(self.ref, (current) => {
      if (O.isSome(current)) {
        return [false, current]
      }
      return [true, O.some(result)]
    })
)
Referenced by 2 symbols