UNPKG

@gooddata/gooddata-js

Version:
52 lines (51 loc) 1.65 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); // (C) 2007-2020 GoodData Corporation var identity_1 = __importDefault(require("lodash/identity")); var rxjs_1 = require("rxjs"); exports.Subscription = rxjs_1.Subscription; var operators_1 = require("rxjs/operators"); /** * Creates infinite stream * Usage: * const subject = createSubject( * (result) => console.log('Success:', result), * (error) => console.error('Error:', error) * ); * subject.next(promise1); * subject.next(promise2); * * subject.unsubscribe(); * * @method createSubject * @param {StreamSuccessHandler<T>} successHandler * @param {StreamErrorHandler} errorHandler * @return {ISubject<Promise<T>>} */ function createSubject(successHandler, errorHandler) { var subject = new rxjs_1.Subject(); var subscription = subject .pipe( // This ensures we get last added promise operators_1.switchMap(identity_1.default), // Streams are closed on error by default so we need this workaround operators_1.catchError(function (error, caught) { errorHandler(error); // handle error return caught; // stream continue })) .subscribe(successHandler); var wrapper = { next: function (promise) { subject.next(promise); }, unsubscribe: function () { subscription.unsubscribe(); subject.unsubscribe(); }, }; return wrapper; } exports.createSubject = createSubject;