diff --git a/packages/extension-query/src/internal/MutationRunner.ts b/packages/extension-query/src/internal/MutationRunner.ts index e81e960..3865223 100644 --- a/packages/extension-query/src/internal/MutationRunner.ts +++ b/packages/extension-query/src/internal/MutationRunner.ts @@ -37,11 +37,11 @@ export const make = const queryStateTag = QueryState.makeTag>() - const run = (key: K) => Effect.all([ - queryStateTag, - QueryClient, - ]).pipe( - Effect.flatMap(([state, client]) => state.set(AsyncData.loading()).pipe( + const run = (key: K) => Effect.Do.pipe( + Effect.bind("state", () => queryStateTag), + Effect.bind("client", () => QueryClient), + + Effect.flatMap(({ state, client }) => state.set(AsyncData.loading()).pipe( Effect.andThen(mutation(key)), client.errorHandler.handle, Effect.matchCauseEffect({ @@ -64,11 +64,11 @@ export const make = value => Ref.set(globalStateRef, value), )) - const forkMutate = (...key: K) => Effect.all([ - Ref.make(AsyncData.noData>()), - Queue.unbounded>>(), - ]).pipe( - Effect.flatMap(([stateRef, stateQueue]) => + const forkMutate = (...key: K) => Effect.Do.pipe( + Effect.bind("stateRef", () => Ref.make(AsyncData.noData>())), + Effect.bind("stateQueue", () => Queue.unbounded>>()), + + Effect.flatMap(({ stateRef, stateQueue }) => Effect.addFinalizer(() => Queue.shutdown(stateQueue)).pipe( Effect.andThen(run(key)), Effect.scoped, diff --git a/packages/extension-query/src/internal/QueryRunner.ts b/packages/extension-query/src/internal/QueryRunner.ts index a216764..5b8bab7 100644 --- a/packages/extension-query/src/internal/QueryRunner.ts +++ b/packages/extension-query/src/internal/QueryRunner.ts @@ -80,23 +80,21 @@ export const make = })) ) - const run = Effect.all([ - queryStateTag, - QueryClient, - ]).pipe( - Effect.flatMap(([state, client]) => latestKeyRef.pipe( - Effect.flatMap(identity), - Effect.flatMap(key => query(key).pipe( - client.errorHandler.handle, - Effect.matchCauseEffect({ - onSuccess: v => Effect.succeed(AsyncData.success(v)).pipe( - Effect.tap(state.set) - ), - onFailure: c => Effect.succeed(AsyncData.failure(c)).pipe( - Effect.tap(state.set) - ), - }), - )), + const run = Effect.Do.pipe( + Effect.bind("state", () => queryStateTag), + Effect.bind("client", () => QueryClient), + Effect.bind("latestKey", () => latestKeyRef.pipe(Effect.flatMap(identity))), + + Effect.flatMap(({ state, client, latestKey }) => query(latestKey).pipe( + client.errorHandler.handle, + Effect.matchCauseEffect({ + onSuccess: v => Effect.succeed(AsyncData.success(v)).pipe( + Effect.tap(state.set) + ), + onFailure: c => Effect.succeed(AsyncData.failure(c)).pipe( + Effect.tap(state.set) + ), + }), )), Effect.provide(context),