12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- import { innerFrom } from '../observable/innerFrom';
- import { executeSchedule } from '../util/executeSchedule';
- import { createOperatorSubscriber } from './OperatorSubscriber';
- export function mergeInternals(source, subscriber, project, concurrent, onBeforeNext, expand, innerSubScheduler, additionalFinalizer) {
- const buffer = [];
- let active = 0;
- let index = 0;
- let isComplete = false;
- const checkComplete = () => {
- if (isComplete && !buffer.length && !active) {
- subscriber.complete();
- }
- };
- const outerNext = (value) => (active < concurrent ? doInnerSub(value) : buffer.push(value));
- const doInnerSub = (value) => {
- expand && subscriber.next(value);
- active++;
- let innerComplete = false;
- innerFrom(project(value, index++)).subscribe(createOperatorSubscriber(subscriber, (innerValue) => {
- onBeforeNext === null || onBeforeNext === void 0 ? void 0 : onBeforeNext(innerValue);
- if (expand) {
- outerNext(innerValue);
- }
- else {
- subscriber.next(innerValue);
- }
- }, () => {
- innerComplete = true;
- }, undefined, () => {
- if (innerComplete) {
- try {
- active--;
- while (buffer.length && active < concurrent) {
- const bufferedValue = buffer.shift();
- if (innerSubScheduler) {
- executeSchedule(subscriber, innerSubScheduler, () => doInnerSub(bufferedValue));
- }
- else {
- doInnerSub(bufferedValue);
- }
- }
- checkComplete();
- }
- catch (err) {
- subscriber.error(err);
- }
- }
- }));
- };
- source.subscribe(createOperatorSubscriber(subscriber, outerNext, () => {
- isComplete = true;
- checkComplete();
- }));
- return () => {
- additionalFinalizer === null || additionalFinalizer === void 0 ? void 0 : additionalFinalizer();
- };
- }
- //# sourceMappingURL=mergeInternals.js.map
|