|
import { __read, __spreadArray } from "tslib"; |
|
import { isScheduler } from '../util/isScheduler'; |
|
import { Observable } from '../Observable'; |
|
import { subscribeOn } from '../operators/subscribeOn'; |
|
import { mapOneOrManyArgs } from '../util/mapOneOrManyArgs'; |
|
import { observeOn } from '../operators/observeOn'; |
|
import { AsyncSubject } from '../AsyncSubject'; |
|
export function bindCallbackInternals(isNodeStyle, 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 bindCallbackInternals(isNodeStyle, callbackFunc, scheduler) |
|
.apply(this, args) |
|
.pipe(mapOneOrManyArgs(resultSelector)); |
|
}; |
|
} |
|
} |
|
if (scheduler) { |
|
return function () { |
|
var args = []; |
|
for (var _i = 0; _i < arguments.length; _i++) { |
|
args[_i] = arguments[_i]; |
|
} |
|
return bindCallbackInternals(isNodeStyle, callbackFunc) |
|
.apply(this, args) |
|
.pipe(subscribeOn(scheduler), observeOn(scheduler)); |
|
}; |
|
} |
|
return function () { |
|
var _this = this; |
|
var args = []; |
|
for (var _i = 0; _i < arguments.length; _i++) { |
|
args[_i] = arguments[_i]; |
|
} |
|
var subject = new AsyncSubject(); |
|
var uninitialized = true; |
|
return new Observable(function (subscriber) { |
|
var subs = subject.subscribe(subscriber); |
|
if (uninitialized) { |
|
uninitialized = false; |
|
var isAsync_1 = false; |
|
var isComplete_1 = false; |
|
callbackFunc.apply(_this, __spreadArray(__spreadArray([], __read(args)), [ |
|
function () { |
|
var results = []; |
|
for (var _i = 0; _i < arguments.length; _i++) { |
|
results[_i] = arguments[_i]; |
|
} |
|
if (isNodeStyle) { |
|
var err = results.shift(); |
|
if (err != null) { |
|
subject.error(err); |
|
return; |
|
} |
|
} |
|
subject.next(1 < results.length ? results : results[0]); |
|
isComplete_1 = true; |
|
if (isAsync_1) { |
|
subject.complete(); |
|
} |
|
}, |
|
])); |
|
if (isComplete_1) { |
|
subject.complete(); |
|
} |
|
isAsync_1 = true; |
|
} |
|
return subs; |
|
}); |
|
}; |
|
} |
|
|