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

31 lines
1.2 KiB
JavaScript

import { operate } from '../util/lift';
import { createOperatorSubscriber } from './OperatorSubscriber';
import { innerFrom } from '../observable/innerFrom';
import { identity } from '../util/identity';
import { noop } from '../util/noop';
import { popResultSelector } from '../util/args';
export function withLatestFrom(...inputs) {
const project = popResultSelector(inputs);
return operate((source, subscriber) => {
const len = inputs.length;
const otherValues = new Array(len);
let hasValue = inputs.map(() => false);
let ready = false;
for (let i = 0; i < len; i++) {
innerFrom(inputs[i]).subscribe(createOperatorSubscriber(subscriber, (value) => {
otherValues[i] = value;
if (!ready && !hasValue[i]) {
hasValue[i] = true;
(ready = hasValue.every(identity)) && (hasValue = null);
}
}, noop));
}
source.subscribe(createOperatorSubscriber(subscriber, (value) => {
if (ready) {
const values = [value, ...otherValues];
subscriber.next(project ? project(...values) : values);
}
}));
});
}
//# sourceMappingURL=withLatestFrom.js.map