1 import { canReportError } from './util/canReportError';
2 import { toSubscriber } from './util/toSubscriber';
3 import { observable as Symbol_observable } from './symbol/observable';
4 import { pipeFromArray } from './util/pipe';
5 import { config } from './config';
6 export class Observable {
7 constructor(subscribe) {
8 this._isScalar = false;
10 this._subscribe = subscribe;
14 const observable = new Observable();
15 observable.source = this;
16 observable.operator = operator;
19 subscribe(observerOrNext, error, complete) {
20 const { operator } = this;
21 const sink = toSubscriber(observerOrNext, error, complete);
23 sink.add(operator.call(sink, this.source));
26 sink.add(this.source || (config.useDeprecatedSynchronousErrorHandling && !sink.syncErrorThrowable) ?
27 this._subscribe(sink) :
28 this._trySubscribe(sink));
30 if (config.useDeprecatedSynchronousErrorHandling) {
31 if (sink.syncErrorThrowable) {
32 sink.syncErrorThrowable = false;
33 if (sink.syncErrorThrown) {
34 throw sink.syncErrorValue;
42 return this._subscribe(sink);
45 if (config.useDeprecatedSynchronousErrorHandling) {
46 sink.syncErrorThrown = true;
47 sink.syncErrorValue = err;
49 if (canReportError(sink)) {
57 forEach(next, promiseCtor) {
58 promiseCtor = getPromiseCtor(promiseCtor);
59 return new promiseCtor((resolve, reject) => {
61 subscription = this.subscribe((value) => {
68 subscription.unsubscribe();
74 _subscribe(subscriber) {
75 const { source } = this;
76 return source && source.subscribe(subscriber);
78 [Symbol_observable]() {
82 if (operations.length === 0) {
85 return pipeFromArray(operations)(this);
87 toPromise(promiseCtor) {
88 promiseCtor = getPromiseCtor(promiseCtor);
89 return new promiseCtor((resolve, reject) => {
91 this.subscribe((x) => value = x, (err) => reject(err), () => resolve(value));
95 Observable.create = (subscribe) => {
96 return new Observable(subscribe);
98 function getPromiseCtor(promiseCtor) {
100 promiseCtor = config.Promise || Promise;
103 throw new Error('no Promise impl found');
107 //# sourceMappingURL=Observable.js.map