(ref: Ref.Ref<number>, latch: Deferred.Deferred<void, never>)
| 78 | it.effect("reset after some inactivity", () => |
| 79 | Effect.gen(function*() { |
| 80 | const io = (ref: Ref.Ref<number>, latch: Deferred.Deferred<void, never>): Effect.Effect<void, string> => { |
| 81 | return Ref.updateAndGet(ref, (n) => n + 1).pipe( |
| 82 | Effect.flatMap((retries) => { |
| 83 | // The 5th retry will fail after 10 seconds to let the schedule reset |
| 84 | if (retries == 5) { |
| 85 | return Deferred.succeed(latch, void 0).pipe( |
| 86 | Effect.zipRight(io(ref, latch).pipe(Effect.delay("10 seconds"))) |
| 87 | ) |
| 88 | } |
| 89 | // The 10th retry will succeed, which is only possible if the schedule was reset |
| 90 | if (retries == 10) { |
| 91 | return Effect.void |
| 92 | } |
| 93 | return Effect.fail("Boom") |
| 94 | }) |
| 95 | ) |
| 96 | } |
| 97 | const schedule = Schedule.recurs(5).pipe(Schedule.resetAfter("5 seconds")) |
| 98 | const retriesCounter = yield* Ref.make(-1) |
| 99 | const latch = yield* Deferred.make<void>() |
no test coverage detected