hugoWebsite/node_modules/rxjs/dist/esm/internal/operators/repeat.js

59 lines
2.1 KiB
JavaScript

import { EMPTY } from '../observable/empty';
import { operate } from '../util/lift';
import { createOperatorSubscriber } from './OperatorSubscriber';
import { innerFrom } from '../observable/innerFrom';
import { timer } from '../observable/timer';
export function repeat(countOrConfig) {
let count = Infinity;
let delay;
if (countOrConfig != null) {
if (typeof countOrConfig === 'object') {
({ count = Infinity, delay } = countOrConfig);
}
else {
count = countOrConfig;
}
}
return count <= 0
? () => EMPTY
: operate((source, subscriber) => {
let soFar = 0;
let sourceSub;
const resubscribe = () => {
sourceSub === null || sourceSub === void 0 ? void 0 : sourceSub.unsubscribe();
sourceSub = null;
if (delay != null) {
const notifier = typeof delay === 'number' ? timer(delay) : innerFrom(delay(soFar));
const notifierSubscriber = createOperatorSubscriber(subscriber, () => {
notifierSubscriber.unsubscribe();
subscribeToSource();
});
notifier.subscribe(notifierSubscriber);
}
else {
subscribeToSource();
}
};
const subscribeToSource = () => {
let syncUnsub = false;
sourceSub = source.subscribe(createOperatorSubscriber(subscriber, undefined, () => {
if (++soFar < count) {
if (sourceSub) {
resubscribe();
}
else {
syncUnsub = true;
}
}
else {
subscriber.complete();
}
}));
if (syncUnsub) {
resubscribe();
}
};
subscribeToSource();
});
}
//# sourceMappingURL=repeat.js.map