1 import { Observable } from '../Observable';
2 import { AsyncSubject } from '../AsyncSubject';
3 import { map } from '../operators/map';
4 import { canReportError } from '../util/canReportError';
5 import { isArray } from '../util/isArray';
6 import { isScheduler } from '../util/isScheduler';
7 export function bindCallback(callbackFunc, resultSelector, scheduler) {
9 if (isScheduler(resultSelector)) {
10 scheduler = resultSelector;
13 return (...args) => bindCallback(callbackFunc, scheduler)(...args).pipe(map((args) => isArray(args) ? resultSelector(...args) : resultSelector(args)));
16 return function (...args) {
25 return new Observable(subscriber => {
28 subject = new AsyncSubject();
29 const handler = (...innerArgs) => {
30 subject.next(innerArgs.length <= 1 ? innerArgs[0] : innerArgs);
34 callbackFunc.apply(context, [...args, handler]);
37 if (canReportError(subject)) {
45 return subject.subscribe(subscriber);
49 args, subscriber, params,
51 return scheduler.schedule(dispatch, 0, state);
56 function dispatch(state) {
58 const { args, subscriber, params } = state;
59 const { callbackFunc, context, scheduler } = params;
60 let { subject } = params;
62 subject = params.subject = new AsyncSubject();
63 const handler = (...innerArgs) => {
64 const value = innerArgs.length <= 1 ? innerArgs[0] : innerArgs;
65 this.add(scheduler.schedule(dispatchNext, 0, { value, subject }));
68 callbackFunc.apply(context, [...args, handler]);
74 this.add(subject.subscribe(subscriber));
76 function dispatchNext(state) {
77 const { value, subject } = state;
81 function dispatchError(state) {
82 const { err, subject } = state;
85 //# sourceMappingURL=bindCallback.js.map