12345678910111213141516171819202122232425262728293031323334353637383940 |
- import { Observable } from '../Observable';
- import { argsArgArrayOrObject } from '../util/argsArgArrayOrObject';
- import { innerFrom } from './innerFrom';
- import { popResultSelector } from '../util/args';
- import { createOperatorSubscriber } from '../operators/OperatorSubscriber';
- import { mapOneOrManyArgs } from '../util/mapOneOrManyArgs';
- import { createObject } from '../util/createObject';
- export function forkJoin(...args) {
- const resultSelector = popResultSelector(args);
- const { args: sources, keys } = argsArgArrayOrObject(args);
- const result = new Observable((subscriber) => {
- const { length } = sources;
- if (!length) {
- subscriber.complete();
- return;
- }
- const values = new Array(length);
- let remainingCompletions = length;
- let remainingEmissions = length;
- for (let sourceIndex = 0; sourceIndex < length; sourceIndex++) {
- let hasValue = false;
- innerFrom(sources[sourceIndex]).subscribe(createOperatorSubscriber(subscriber, (value) => {
- if (!hasValue) {
- hasValue = true;
- remainingEmissions--;
- }
- values[sourceIndex] = value;
- }, () => remainingCompletions--, undefined, () => {
- if (!remainingCompletions || !hasValue) {
- if (!remainingEmissions) {
- subscriber.next(keys ? createObject(keys, values) : values);
- }
- subscriber.complete();
- }
- }));
- }
- });
- return resultSelector ? result.pipe(mapOneOrManyArgs(resultSelector)) : result;
- }
- //# sourceMappingURL=forkJoin.js.map
|