UNPKG

3.86 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3var toSubscriber_1 = require("./util/toSubscriber");
4var observable_1 = require("../internal/symbol/observable");
5var pipe_1 = require("./util/pipe");
6var config_1 = require("./config");
7var Observable = (function () {
8 function Observable(subscribe) {
9 this._isScalar = false;
10 if (subscribe) {
11 this._subscribe = subscribe;
12 }
13 }
14 Observable.prototype.lift = function (operator) {
15 var observable = new Observable();
16 observable.source = this;
17 observable.operator = operator;
18 return observable;
19 };
20 Observable.prototype.subscribe = function (observerOrNext, error, complete) {
21 var operator = this.operator;
22 var sink = toSubscriber_1.toSubscriber(observerOrNext, error, complete);
23 if (operator) {
24 operator.call(sink, this.source);
25 }
26 else {
27 sink.add(this.source || (config_1.config.useDeprecatedSynchronousErrorHandling && !sink.syncErrorThrowable) ?
28 this._subscribe(sink) :
29 this._trySubscribe(sink));
30 }
31 if (config_1.config.useDeprecatedSynchronousErrorHandling) {
32 if (sink.syncErrorThrowable) {
33 sink.syncErrorThrowable = false;
34 if (sink.syncErrorThrown) {
35 throw sink.syncErrorValue;
36 }
37 }
38 }
39 return sink;
40 };
41 Observable.prototype._trySubscribe = function (sink) {
42 try {
43 return this._subscribe(sink);
44 }
45 catch (err) {
46 if (config_1.config.useDeprecatedSynchronousErrorHandling) {
47 sink.syncErrorThrown = true;
48 sink.syncErrorValue = err;
49 }
50 sink.error(err);
51 }
52 };
53 Observable.prototype.forEach = function (next, promiseCtor) {
54 var _this = this;
55 promiseCtor = getPromiseCtor(promiseCtor);
56 return new promiseCtor(function (resolve, reject) {
57 var subscription;
58 subscription = _this.subscribe(function (value) {
59 try {
60 next(value);
61 }
62 catch (err) {
63 reject(err);
64 if (subscription) {
65 subscription.unsubscribe();
66 }
67 }
68 }, reject, resolve);
69 });
70 };
71 Observable.prototype._subscribe = function (subscriber) {
72 var source = this.source;
73 return source && source.subscribe(subscriber);
74 };
75 Observable.prototype[observable_1.observable] = function () {
76 return this;
77 };
78 Observable.prototype.pipe = function () {
79 var operations = [];
80 for (var _i = 0; _i < arguments.length; _i++) {
81 operations[_i] = arguments[_i];
82 }
83 if (operations.length === 0) {
84 return this;
85 }
86 return pipe_1.pipeFromArray(operations)(this);
87 };
88 Observable.prototype.toPromise = function (promiseCtor) {
89 var _this = this;
90 promiseCtor = getPromiseCtor(promiseCtor);
91 return new promiseCtor(function (resolve, reject) {
92 var value;
93 _this.subscribe(function (x) { return value = x; }, function (err) { return reject(err); }, function () { return resolve(value); });
94 });
95 };
96 Observable.create = function (subscribe) {
97 return new Observable(subscribe);
98 };
99 return Observable;
100}());
101exports.Observable = Observable;
102function getPromiseCtor(promiseCtor) {
103 if (!promiseCtor) {
104 promiseCtor = config_1.config.Promise || Promise;
105 }
106 if (!promiseCtor) {
107 throw new Error('no Promise impl found');
108 }
109 return promiseCtor;
110}
111//# sourceMappingURL=Observable.js.map
\No newline at end of file