@gooddata/gooddata-js
Version:
GoodData JavaScript SDK
52 lines (51 loc) • 1.65 kB
JavaScript
;
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;