22 lines
597 B
TypeScript
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)
|