Skip to content

Commit c2f14be

Browse files
committed
set state back to idle on exit
1 parent fec24d4 commit c2f14be

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

src/hooks/useResultCallback.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import * as Effect from "@effect/io/Effect"
2+
import * as Exit from "@effect/io/Exit"
23
import * as Fiber from "@effect/io/Fiber"
34
import * as Ref from "@effect/io/Ref"
45
import * as Runtime from "@effect/io/Runtime"
@@ -58,13 +59,18 @@ export const makeUseResultCallback: <R>(
5859
})
5960
)
6061

61-
const fiber = Effect.sync(() => {
62+
const fiber = Stream.suspend(() => {
6263
setResult((prev) => updateNext(Result.waiting(prev), trackRef))
64+
return f(...args)
6365
}).pipe(
64-
Stream.flatMap(() => f(...args)),
6566
Stream.tap((value) => maybeSetResult(updateNext(Result.success(value), trackRef))),
6667
Stream.tapErrorCause((cause) => maybeSetResult(updateNext(Result.failCause(cause), trackRef))),
6768
Stream.runDrain,
69+
Effect.onExit((exit) =>
70+
Exit.isInterrupted(exit)
71+
? Effect.unit
72+
: Effect.sync(() => setFiberState({ _tag: "Idle" }))
73+
),
6874
Runtime.runFork(runtime)
6975
)
7076

0 commit comments

Comments
 (0)