| /** PURE_IMPORTS_START _Observable,_AsyncSubject,_operators_map,_util_canReportError,_util_isArray,_util_isScheduler PURE_IMPORTS_END */ |
| import { Observable } from '../Observable'; |
| import { AsyncSubject } from '../AsyncSubject'; |
| import { map } from '../operators/map'; |
| import { canReportError } from '../util/canReportError'; |
| import { isArray } from '../util/isArray'; |
| import { isScheduler } from '../util/isScheduler'; |
| export function bindCallback(callbackFunc, resultSelector, scheduler) { |
| if (resultSelector) { |
| if (isScheduler(resultSelector)) { |
| scheduler = resultSelector; |
| } |
| else { |
| return function () { |
| var args = []; |
| for (var _i = 0; _i < arguments.length; _i++) { |
| args[_i] = arguments[_i]; |
| } |
| return bindCallback(callbackFunc, scheduler).apply(void 0, args).pipe(map(function (args) { return isArray(args) ? resultSelector.apply(void 0, args) : resultSelector(args); })); |
| }; |
| } |
| } |
| return function () { |
| var args = []; |
| for (var _i = 0; _i < arguments.length; _i++) { |
| args[_i] = arguments[_i]; |
| } |
| var context = this; |
| var subject; |
| var params = { |
| context: context, |
| subject: subject, |
| callbackFunc: callbackFunc, |
| scheduler: scheduler, |
| }; |
| return new Observable(function (subscriber) { |
| if (!scheduler) { |
| if (!subject) { |
| subject = new AsyncSubject(); |
| var handler = function () { |
| var innerArgs = []; |
| for (var _i = 0; _i < arguments.length; _i++) { |
| innerArgs[_i] = arguments[_i]; |
| } |
| subject.next(innerArgs.length <= 1 ? innerArgs[0] : innerArgs); |
| subject.complete(); |
| }; |
| try { |
| callbackFunc.apply(context, args.concat([handler])); |
| } |
| catch (err) { |
| if (canReportError(subject)) { |
| subject.error(err); |
| } |
| else { |
| console.warn(err); |
| } |
| } |
| } |
| return subject.subscribe(subscriber); |
| } |
| else { |
| var state = { |
| args: args, subscriber: subscriber, params: params, |
| }; |
| return scheduler.schedule(dispatch, 0, state); |
| } |
| }); |
| }; |
| } |
| function dispatch(state) { |
| var _this = this; |
| var self = this; |
| var args = state.args, subscriber = state.subscriber, params = state.params; |
| var callbackFunc = params.callbackFunc, context = params.context, scheduler = params.scheduler; |
| var subject = params.subject; |
| if (!subject) { |
| subject = params.subject = new AsyncSubject(); |
| var handler = function () { |
| var innerArgs = []; |
| for (var _i = 0; _i < arguments.length; _i++) { |
| innerArgs[_i] = arguments[_i]; |
| } |
| var value = innerArgs.length <= 1 ? innerArgs[0] : innerArgs; |
| _this.add(scheduler.schedule(dispatchNext, 0, { value: value, subject: subject })); |
| }; |
| try { |
| callbackFunc.apply(context, args.concat([handler])); |
| } |
| catch (err) { |
| subject.error(err); |
| } |
| } |
| this.add(subject.subscribe(subscriber)); |
| } |
| function dispatchNext(state) { |
| var value = state.value, subject = state.subject; |
| subject.next(value); |
| subject.complete(); |
| } |
| function dispatchError(state) { |
| var err = state.err, subject = state.subject; |
| subject.error(err); |
| } |
| //# sourceMappingURL=bindCallback.js.map |