Hyperlinkv0.8.0-beta.28

RequestResolver

RequestResolver.fromFunctionBatchedconsteffect/RequestResolver.ts:377
<A extends Request.Any>(
  f: (
    entries: NonEmptyArray<Request.Entry<A>>
  ) => Iterable<Request.Success<A>>
): RequestResolver<A>

Constructs a request resolver from a pure function that takes a list of requests and returns a list of results of the same size. Each item in the result list must correspond to the item at the same index in the request list.

Example (Batching pure request handling)

import { Effect, Request, RequestResolver } from "effect"

interface GetDoubleRequest extends Request.Request<number> {
  readonly _tag: "GetDoubleRequest"
  readonly value: number
}
const GetDoubleRequest = Request.tagged<GetDoubleRequest>("GetDoubleRequest")

// Create a resolver that processes multiple requests in a batch
const DoubleResolver = RequestResolver.fromFunctionBatched<GetDoubleRequest>(
  (entries) => entries.map((entry) => entry.request.value * 2)
)

// Usage with multiple requests
const effects = [1, 2, 3].map((value) =>
  Effect.request(GetDoubleRequest({ value }), DoubleResolver)
)
const batchedEffect = Effect.all(effects) // [2, 4, 6]
constructors
export const fromFunctionBatched = <A extends Request.Any>(
  f: (entries: NonEmptyArray<Request.Entry<A>>) => Iterable<Request.Success<A>>
): RequestResolver<A> =>
  make(
    (entries) =>
      Effect.sync(() => {
        let i = 0
        for (const result of f(entries)) {
          const entry = entries[i++]
          entry.completeUnsafe(exitSucceed(result))
        }
      })
  )