Files

22 lines
597 B
TypeScript

import * as Effect from "effect/Effect"
import * as TxRef from "effect/TxRef"
const program = Effect.gen(function*() {
const ref = yield* TxRef.make(0)
yield* Effect.forkChild(Effect.forever(
TxRef.update(ref, (n) => n + 1).pipe(Effect.delay("100 millis"))
))
yield* Effect.tx(Effect.gen(function*() {
const value = yield* TxRef.get(ref)
if (value < 10) {
yield* Effect.log(`retry due to value: ${value}`)
return yield* Effect.txRetry
}
yield* Effect.log(`transaction done with value: ${value}`)
}))
})
Effect.runPromise(program).catch(console.error)