Effect.Serviceのscoped
from Effect.Service
Effect.Serviceのscoped
リソースの獲得・解放を伴うサービス(Lifecycle管理)
scopedを使った例
code:ts
class Scoped extends Effect.Service<Scoped>()("Scoped", {
scoped: Effect.gen(function* () {
const resource = yield* Effect.acquireRelease(
Console.log("Aquiring...").pipe(Effect.as("foo")),
() => Console.log("Releasing...")
)
yield* Effect.addFinalizer(() => Console.log("Shutting down"))
return { resource }
})
}) {}
実行時に:
code:ts
Effect.runPromise(
program.pipe(Effect.provide(Scoped.Default))
)
ログ:
code:_
Aquiring...
The resource is foo
Shutting down
Releasing...