1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- 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
|