Sha256: 2c8b229ebe8b3024f7d77320a9ae86e7c3c8870ba7e380fb1cc54b48983b9fc9
Contents?: true
Size: 1.88 KB
Versions: 49
Compression:
Stored size: 1.88 KB
Contents
import { Observable, SubscribableOrPromise } from '../Observable'; import { Subscriber } from '../Subscriber'; import { AnonymousSubscription, TeardownLogic } from '../Subscription'; import { subscribeToResult } from '../util/subscribeToResult'; import { OuterSubscriber } from '../OuterSubscriber'; /** * We need this JSDoc comment for affecting ESDoc. * @extends {Ignored} * @hide true */ export class UsingObservable<T> extends Observable<T> { static create<T>(resourceFactory: () => AnonymousSubscription | void, observableFactory: (resource: AnonymousSubscription) => SubscribableOrPromise<T> | void): Observable<T> { return new UsingObservable<T>(resourceFactory, observableFactory); } constructor(private resourceFactory: () => AnonymousSubscription | void, private observableFactory: (resource: AnonymousSubscription) => SubscribableOrPromise<T> | void) { super(); } /** @deprecated internal use only */ _subscribe(subscriber: Subscriber<T>): TeardownLogic { const { resourceFactory, observableFactory } = this; let resource: AnonymousSubscription; try { resource = <AnonymousSubscription>resourceFactory(); return new UsingSubscriber(subscriber, resource, observableFactory); } catch (err) { subscriber.error(err); } } } class UsingSubscriber<T> extends OuterSubscriber<T, T> { constructor(destination: Subscriber<T>, private resource: AnonymousSubscription, private observableFactory: (resource: AnonymousSubscription) => SubscribableOrPromise<T> | void) { super(destination); destination.add(resource); this.tryUse(); } private tryUse(): void { try { const source = this.observableFactory.call(this, this.resource); if (source) { this.add(subscribeToResult(this, source)); } } catch (err) { this._error(err); } } }
Version data entries
49 entries across 49 versions & 4 rubygems