createReactiveActionStore
Wraps an async function in a ReactiveActionStore. Each dispatch creates a fresh
AbortController and aborts the previous one; the superseded call's outcome is dropped,
so only the most recent dispatch can mutate state.
The wrapped function receives the AbortSignal as its first argument, followed by whatever
arguments were passed to dispatch. When options.perRequestSignal is provided, that factory
is invoked on every dispatch and the returned signal is combined with the per-dispatch
controller via AbortSignal.any. Aborting the factory-returned signal cancels the in-flight
call and transitions the store to error with the abort reason. Each new dispatch calls the
factory again — useful for per-attempt timeouts (() => AbortSignal.timeout(N)) that reset on
each call.
Type Parameters
| Type Parameter | Description |
|---|---|
TArgs extends readonly unknown[] | Argument tuple forwarded from dispatch to fn. |
TResult | Resolved value type of fn. |
Parameters
| Parameter | Type | Description |
|---|---|---|
fn | (signal, ...args) => Promise<TResult> | Async function to wrap. Receives an AbortSignal plus the dispatch arguments. |
options? | { perRequestSignal?: () => | AbortSignal | undefined; } | Optional configuration. |
options.perRequestSignal? | () => | AbortSignal | undefined | Factory invoked on every dispatch; returns the signal to compose with the per-dispatch controller. Return undefined to skip composition for that attempt. |
Returns
ReactiveActionStore<TArgs, TResult>
A ReactiveActionStore exposing dispatch, dispatchAsync, getState, subscribe,
and reset.