@graphistry/falcor
Version:
A JavaScript library for efficient data fetching.
76 lines (68 loc) • 1.91 kB
JavaScript
var Subscription = require('./Subscription');
module.exports = Subscriber;
function Subscriber(destination, parent, onCompleted) {
if (typeof destination === 'function' ||
typeof parent === 'function' ||
typeof onCompleted === 'function') {
Subscription.call(this, []);
this.destination = {
error: parent,
onError: parent,
next: destination,
onNext: destination,
complete: onCompleted,
onCompleted: onCompleted
}
} else {
Subscription.call(this, [], parent);
this.parent = parent;
this.destination = destination;
}
}
Subscriber.prototype = Object.create(Subscription.prototype);
Subscriber.prototype.next =
Subscriber.prototype.onNext = function onNext(value) {
var dest = this.destination;
if (dest) {
if (dest.onNext) {
dest.onNext(value);
} else if (dest.next) {
dest.next(value);
}
}
}
Subscriber.prototype.error =
Subscriber.prototype.onError = function onError(error) {
var signaled = false;
var dest = this.destination;
if (dest) {
if (dest.onError) {
signaled = true;
dest.onError(error);
} else if (dest.error) {
signaled = true;
dest.error(error);
}
this.dispose();
}
if (!signaled) {
throw error;
}
}
Subscriber.prototype.complete =
Subscriber.prototype.onCompleted = function onCompleted() {
var dest = this.destination;
if (dest) {
if (dest.onCompleted) {
dest.onCompleted();
} else if (dest.complete) {
dest.complete();
}
this.dispose();
}
}
Subscriber.prototype.dispose =
Subscriber.prototype.unsubscribe = function () {
this.destination = null;
Subscription.prototype.dispose.call(this);
}