Effect.acquireUseRelease
docs
リソースの
Acquired: 適切な取得
Used: 目的に沿った使用
Released: エラーが発生しても確実な解放
を保証できる
リソース管理する言語機能やパターンやmrsekut.icon
Effect.acquireReleaseに比べて柔軟性が低い
ワンショットでしかuseできない
一時的に使ってすぐ解放するような用途には良いかもしれない
acquireReleaseとacquireUseRelease
code:ts
Effect.acquireUseRelease(acquire, use, release)
例(リソースのライフサイクルを自動管理)
code:ts
import { Effect, Console } from "effect"
interface MyResource {
readonly contents: string
readonly close: () => Promise<void>
}
const getMyResource = (): Promise<MyResource> =>
Promise.resolve({
contents: "lorem ipsum",
close: () =>
new Promise((resolve) => {
console.log("Resource released")
resolve()
})
})
const acquire = Effect.tryPromise({
try: () =>
getMyResource().then((res) => {
console.log("Resource acquired")
return res
}),
catch: () => new Error("getMyResourceError")
})
const release = (res: MyResource) => Effect.promise(() => res.close())
const use = (res: MyResource) => Console.log(content is ${res.contents})
const program = Effect.acquireUseRelease(acquire, use, release)
Effect.runPromise(program)
/*
出力:
Resource acquired
content is lorem ipsum
Resource released
*/