Scope.addFinalizer
Scope (effect)にfinalizerを追加する
finalizerはscopeが閉じられるときに必ず実行される
成功・失敗・中断に関わらず実行される
https://effect.website/docs/resource-management/scope/#addfinalizer
例:成功時にfinalizerを追加
code:ts
import { Effect, Console } from "effect"
// program :: Effect<string, never, Scope>
const program = Effect.gen(function* () {
yield* Effect.addFinalizer((exit) =>
Console.log(Finalizer executed. Exit status: ${exit._tag})
)
return "some result"
})
const runnable = Effect.scoped(program)
Effect.runPromiseExit(runnable).then(console.log)
programの型はEffect<string, never, Scope>
Scopeの提供が必要なEffectであることを示している
Effect.scopedを使うことで、新しいscopeが作成され、その中でeffectが実行され、finalizerも適切に処理される