50 lines
1.6 KiB
JavaScript
50 lines
1.6 KiB
JavaScript
|
import { Subscriber } from '../Subscriber';
|
||
|
import { Notification } from '../Notification';
|
||
|
export function observeOn(scheduler, delay = 0) {
|
||
|
return function observeOnOperatorFunction(source) {
|
||
|
return source.lift(new ObserveOnOperator(scheduler, delay));
|
||
|
};
|
||
|
}
|
||
|
export class ObserveOnOperator {
|
||
|
constructor(scheduler, delay = 0) {
|
||
|
this.scheduler = scheduler;
|
||
|
this.delay = delay;
|
||
|
}
|
||
|
call(subscriber, source) {
|
||
|
return source.subscribe(new ObserveOnSubscriber(subscriber, this.scheduler, this.delay));
|
||
|
}
|
||
|
}
|
||
|
export class ObserveOnSubscriber extends Subscriber {
|
||
|
constructor(destination, scheduler, delay = 0) {
|
||
|
super(destination);
|
||
|
this.scheduler = scheduler;
|
||
|
this.delay = delay;
|
||
|
}
|
||
|
static dispatch(arg) {
|
||
|
const { notification, destination } = arg;
|
||
|
notification.observe(destination);
|
||
|
this.unsubscribe();
|
||
|
}
|
||
|
scheduleMessage(notification) {
|
||
|
const destination = this.destination;
|
||
|
destination.add(this.scheduler.schedule(ObserveOnSubscriber.dispatch, this.delay, new ObserveOnMessage(notification, this.destination)));
|
||
|
}
|
||
|
_next(value) {
|
||
|
this.scheduleMessage(Notification.createNext(value));
|
||
|
}
|
||
|
_error(err) {
|
||
|
this.scheduleMessage(Notification.createError(err));
|
||
|
this.unsubscribe();
|
||
|
}
|
||
|
_complete() {
|
||
|
this.scheduleMessage(Notification.createComplete());
|
||
|
this.unsubscribe();
|
||
|
}
|
||
|
}
|
||
|
export class ObserveOnMessage {
|
||
|
constructor(notification, destination) {
|
||
|
this.notification = notification;
|
||
|
this.destination = destination;
|
||
|
}
|
||
|
}
|
||
|
//# sourceMappingURL=observeOn.js.map
|