MessagesForMacintosh/JS/node_modules/apollo-client/util/observables.js

63 lines
2.2 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var Observable_1 = require("./Observable");
function multiplex(inner) {
var observers = new Set();
var sub = null;
return new Observable_1.Observable(function (observer) {
observers.add(observer);
sub = sub || inner.subscribe({
next: function (value) {
observers.forEach(function (obs) { return obs.next && obs.next(value); });
},
error: function (error) {
observers.forEach(function (obs) { return obs.error && obs.error(error); });
},
complete: function () {
observers.forEach(function (obs) { return obs.complete && obs.complete(); });
},
});
return function () {
if (observers.delete(observer) && !observers.size && sub) {
sub.unsubscribe();
sub = null;
}
};
});
}
exports.multiplex = multiplex;
function asyncMap(observable, mapFn) {
return new Observable_1.Observable(function (observer) {
var next = observer.next, error = observer.error, complete = observer.complete;
var activeNextCount = 0;
var completed = false;
var handler = {
next: function (value) {
++activeNextCount;
new Promise(function (resolve) {
resolve(mapFn(value));
}).then(function (result) {
--activeNextCount;
next && next.call(observer, result);
completed && handler.complete();
}, function (e) {
--activeNextCount;
error && error.call(observer, e);
});
},
error: function (e) {
error && error.call(observer, e);
},
complete: function () {
completed = true;
if (!activeNextCount) {
complete && complete.call(observer);
}
},
};
var sub = observable.subscribe(handler);
return function () { return sub.unsubscribe(); };
});
}
exports.asyncMap = asyncMap;
//# sourceMappingURL=observables.js.map