mirror of
https://github.com/CamHenlin/MessagesForMacintosh.git
synced 2024-11-29 08:49:40 +00:00
63 lines
2.2 KiB
JavaScript
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
|