UNPKG

2.3 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3var Observable_1 = require("./Observable");
4function multiplex(inner) {
5 var observers = new Set();
6 var sub = null;
7 return new Observable_1.Observable(function (observer) {
8 observers.add(observer);
9 sub = sub || inner.subscribe({
10 next: function (value) {
11 observers.forEach(function (obs) { return obs.next && obs.next(value); });
12 },
13 error: function (error) {
14 observers.forEach(function (obs) { return obs.error && obs.error(error); });
15 },
16 complete: function () {
17 observers.forEach(function (obs) { return obs.complete && obs.complete(); });
18 },
19 });
20 return function () {
21 if (observers.delete(observer) && !observers.size && sub) {
22 sub.unsubscribe();
23 sub = null;
24 }
25 };
26 });
27}
28exports.multiplex = multiplex;
29function asyncMap(observable, mapFn) {
30 return new Observable_1.Observable(function (observer) {
31 var next = observer.next, error = observer.error, complete = observer.complete;
32 var activeNextCount = 0;
33 var completed = false;
34 var handler = {
35 next: function (value) {
36 ++activeNextCount;
37 new Promise(function (resolve) {
38 resolve(mapFn(value));
39 }).then(function (result) {
40 --activeNextCount;
41 next && next.call(observer, result);
42 completed && handler.complete();
43 }, function (e) {
44 --activeNextCount;
45 error && error.call(observer, e);
46 });
47 },
48 error: function (e) {
49 error && error.call(observer, e);
50 },
51 complete: function () {
52 completed = true;
53 if (!activeNextCount) {
54 complete && complete.call(observer);
55 }
56 },
57 };
58 var sub = observable.subscribe(handler);
59 return function () { return sub.unsubscribe(); };
60 });
61}
62exports.asyncMap = asyncMap;
63//# sourceMappingURL=observables.js.map
\No newline at end of file