1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | var Observable_1 = require("./Observable");
|
4 | function 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 | }
|
28 | exports.multiplex = multiplex;
|
29 | function 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 | }
|
62 | exports.asyncMap = asyncMap;
|
63 |
|
\ | No newline at end of file |