MCPcopy Create free account
hub / github.com/Effect-TS/effect / fiberJoinAll

Function fiberJoinAll

packages/effect/src/internal/effect.ts:823–853  ·  view source on GitHub ↗
(self: A)

Source from the content-addressed store, hash-verified

821
822/** @internal */
823export const fiberJoinAll = <A extends Iterable<Fiber.Fiber<any, any>>>(self: A): Effect.Effect<
824 Arr.ReadonlyArray.With<A, A extends Iterable<Fiber.Fiber<infer _A, infer _E>> ? _A : never>,
825 A extends Iterable<Fiber.Fiber<infer _A, infer _E>> ? _E : never
826> =>
827 callback((resume) => {
828 const fibers = Array.from(self)
829 if (fibers.length === 0) return resume(succeed(Arr.empty() as any))
830 const out = new Array<any>(fibers.length) as Arr.NonEmptyArray<any>
831 const cancels = Arr.empty<() => void>()
832 let done = 0
833 let failed = false
834 for (let i = 0; i < fibers.length; i++) {
835 if (failed) break
836 cancels.push(fibers[i].addObserver((exit) => {
837 done++
838 if (exit._tag === "Failure") {
839 failed = true
840 cancels.forEach((cancel) => cancel())
841 return resume(exit as any)
842 }
843 out[i] = exit.value
844 if (done === fibers.length) {
845 resume(succeed(out))
846 }
847 }))
848 }
849 return sync(() => {
850 failed = true
851 cancels.forEach((cancel) => cancel())
852 })
853 })
854
855/** @internal */
856export const fiberInterrupt = <A, E>(

Callers

nothing calls this directly

Calls 8

pushMethod · 0.80
addObserverMethod · 0.80
callbackFunction · 0.70
succeedFunction · 0.70
forEachMethod · 0.65
resumeFunction · 0.50
cancelFunction · 0.50
syncFunction · 0.50

Tested by

no test coverage detected