Skip to content

Instantly share code, notes, and snippets.

@caroso1222
Last active December 15, 2018 17:31
Show Gist options
  • Save caroso1222/33f0899ee3e0eaabb026dc9fdc0f0476 to your computer and use it in GitHub Desktop.
Save caroso1222/33f0899ee3e0eaabb026dc9fdc0f0476 to your computer and use it in GitHub Desktop.
rxjs-pausable-operator
class PausableObservable<T> extends Observable<T> {
private pauser: BehaviorSubject<boolean>;
pause(){
this.pauser.next(true);
}
resume(){
this.pauser.next(false);
}
}
function pausable() {
return function pauseFn<T>(source: Observable<T>): PausableObservable<T> {
const pausableProto = PausableObservable.prototype;
const pauser = new BehaviorSubject(false);
const newSource = pauser.pipe(
switchMap(paused => paused ? NEVER : source.pipe(materialize())),
dematerialize()
)
const pausable = Object.create(newSource, {
pause: { value: pausableProto.pause },
resume: { value: pausableProto.resume },
pauser: { value: pauser }
});
return pausable as PausableObservable<T>;
};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment