Effect.all
複数のEffectを一つに統合
デフォルトでは直列に実行される
1つでも失敗すると即座に中断する
#wip
https://effect.website/docs/getting-started/building-pipelines/#all
https://effect.website/docs/getting-started/control-flow/#all
Tuple
code:ts
const results = Effect.all([
Effect.succeed(42),
Effect.succeed("Hello")
]) // Effect<number, string>
出力は [42, "Hello"] という タプル。
Iterable
code:ts
const iterable = 1, 2, 3.map(n => Effect.succeed(n))
const results = Effect.all(iterable) // Effect<number[]>
出力は [1, 2, 3]。イテラブルにも対応。
Struct
code:ts
const results = Effect.all({
a: Effect.succeed(42),
b: Effect.succeed("Hello")
}) // Effect<{ a: number; b: string }>
出力は { a: 42, b: "Hello" }
Record
code:ts
const results = Effect.all({
key1: Effect.succeed(1),
key2: Effect.succeed(2)
}) // Effect<Record<string, number>>
出力は { key1: 1, key2: 2 }
modeでerror handlingのmode指定
mode: "either":全て実行し、成功と失敗を Either で返す
code:ts
Effect.all(..., { mode: "either" }) // 成功: Right、失敗: Left
結果例:
code:ts
[
Right("Task1"),
Left("Task2 error"),
Right("Task3")
]
mode: "validate":全て実行し、成功→None、失敗→Some(error)
code:ts
Effect.all(..., { mode: "validate" })
結果例:
code:ts
[
None,
Some("Task2 error"),
None
]
→ 全体としては 失敗扱い になるが、何が失敗したか詳細に取れる
concurrency
並列 or 逐次処理の制御
https://effect.website/docs/concurrency/basic-concurrency/#concurrency-options