withAbort
lets an RxJS Observable be controlled by an AbortSignal
. This is great for using Observables within a context that relies on the AbortController API.
Imagine the following marble diagram for an Observable, with time going from left to right.
And imagine that we have an AbortSignal that we want to end that subscription. Its aborted
state is initially false
, but then an abort
event eventually happens, changing its state to true.
We can use withAbort
to create a new Observable that subscribes to the source, and unsubscribes when the signal switches.
Want to go the other way, turning a function that uses the AbortController into an Observable? Check out rx-xtra.defer-abort
!
rx-xtra.with-abort
is part of Rx Xtra
, a collection of RxJS utilities.
Created by Joel Shinness LinkTree • Github • Buy me a coffee!
withAbort<T>(signal:AbortSignal):MonoTypeOperatorFunction<T>
- Parameters
signal
:AbortSignal
- Returns
MonoTypeOperatorFunction<T>
An operator that takes a source Observable and returns a created Observable. The created observable will behave exactly like its source, except that it will complete when the signal aborts. If the signal has already aborted by the time the subscription happens, the created observable will behave like EMPTY and complete immediately on subscription without emitting any values.
// From some library somewhere...
function someAbortableApi(cb:(next:(val:number) => void, signal:AbortSignal) => void){}
// In your app code...
const myObservable:Observable<number> = /* Some Observable */
someAbortableApi((next, signal) => {
myObservable.pipe(
withAbort(signal)
).subscribe(next);
});