Hyperlinkv0.8.0-beta.28

MultiNode

MultiNode.combineQueryconstsrc/MultiNode.ts:47
<Svc, A, E, B>(
  peers: Record<string, Svc>,
  pick: (service: Svc) => Effect.Effect<A, E>,
  combine: (results: ReadonlyArray<NodeResult<A, E>>) => B
): Effect.Effect<B>

Gather a query field from every instance in peers (keyed by node), each call captured as a NodeResult — a down node becomes a failed exit, never a thrown gather — then combine. The combine sees every node's outcome, so it owns the down-node policy.

combinatorsNodeResult
Source src/MultiNode.ts:4711 lines
export const combineQuery = <Svc, A, E, B>(
  peers: Record<string, Svc>,
  pick: (service: Svc) => Effect.Effect<A, E>,
  combine: (results: ReadonlyArray<NodeResult<A, E>>) => B,
): Effect.Effect<B> =>
  Effect.forEach(
    Object.entries(peers),
    ([node, service]) =>
      Effect.map(Effect.exit(pick(service)), (exit): NodeResult<A, E> => ({ node, exit })),
    { concurrency: "unbounded" },
  ).pipe(Effect.map(combine));
Referenced by 1 symbols