diff options
Diffstat (limited to 'node_modules/rxjs/dist/esm/internal/observable/combineLatest.js')
| -rw-r--r-- | node_modules/rxjs/dist/esm/internal/observable/combineLatest.js | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/node_modules/rxjs/dist/esm/internal/observable/combineLatest.js b/node_modules/rxjs/dist/esm/internal/observable/combineLatest.js new file mode 100644 index 0000000..f5d10fd --- /dev/null +++ b/node_modules/rxjs/dist/esm/internal/observable/combineLatest.js @@ -0,0 +1,62 @@ +import { Observable } from '../Observable'; +import { argsArgArrayOrObject } from '../util/argsArgArrayOrObject'; +import { from } from './from'; +import { identity } from '../util/identity'; +import { mapOneOrManyArgs } from '../util/mapOneOrManyArgs'; +import { popResultSelector, popScheduler } from '../util/args'; +import { createObject } from '../util/createObject'; +import { createOperatorSubscriber } from '../operators/OperatorSubscriber'; +import { executeSchedule } from '../util/executeSchedule'; +export function combineLatest(...args) { + const scheduler = popScheduler(args); + const resultSelector = popResultSelector(args); + const { args: observables, keys } = argsArgArrayOrObject(args); + if (observables.length === 0) { + return from([], scheduler); + } + const result = new Observable(combineLatestInit(observables, scheduler, keys + ? + (values) => createObject(keys, values) + : + identity)); + return resultSelector ? result.pipe(mapOneOrManyArgs(resultSelector)) : result; +} +export function combineLatestInit(observables, scheduler, valueTransform = identity) { + return (subscriber) => { + maybeSchedule(scheduler, () => { + const { length } = observables; + const values = new Array(length); + let active = length; + let remainingFirstValues = length; + for (let i = 0; i < length; i++) { + maybeSchedule(scheduler, () => { + const source = from(observables[i], scheduler); + let hasFirstValue = false; + source.subscribe(createOperatorSubscriber(subscriber, (value) => { + values[i] = value; + if (!hasFirstValue) { + hasFirstValue = true; + remainingFirstValues--; + } + if (!remainingFirstValues) { + subscriber.next(valueTransform(values.slice())); + } + }, () => { + if (!--active) { + subscriber.complete(); + } + })); + }, subscriber); + } + }, subscriber); + }; +} +function maybeSchedule(scheduler, execute, subscription) { + if (scheduler) { + executeSchedule(subscription, scheduler, execute); + } + else { + execute(); + } +} +//# sourceMappingURL=combineLatest.js.map
\ No newline at end of file |
