1 import { isArray } from '../util/isArray';
2 import { fromArray } from './fromArray';
3 import { OuterSubscriber } from '../OuterSubscriber';
4 import { subscribeToResult } from '../util/subscribeToResult';
5 export function race(...observables) {
6 if (observables.length === 1) {
7 if (isArray(observables[0])) {
8 observables = observables[0];
11 return observables[0];
14 return fromArray(observables, undefined).lift(new RaceOperator());
16 export class RaceOperator {
17 call(subscriber, source) {
18 return source.subscribe(new RaceSubscriber(subscriber));
21 export class RaceSubscriber extends OuterSubscriber {
22 constructor(destination) {
24 this.hasFirst = false;
25 this.observables = [];
26 this.subscriptions = [];
29 this.observables.push(observable);
32 const observables = this.observables;
33 const len = observables.length;
35 this.destination.complete();
38 for (let i = 0; i < len && !this.hasFirst; i++) {
39 let observable = observables[i];
40 let subscription = subscribeToResult(this, observable, observable, i);
41 if (this.subscriptions) {
42 this.subscriptions.push(subscription);
44 this.add(subscription);
46 this.observables = null;
49 notifyNext(outerValue, innerValue, outerIndex, innerIndex, innerSub) {
52 for (let i = 0; i < this.subscriptions.length; i++) {
53 if (i !== outerIndex) {
54 let subscription = this.subscriptions[i];
55 subscription.unsubscribe();
56 this.remove(subscription);
59 this.subscriptions = null;
61 this.destination.next(innerValue);
64 //# sourceMappingURL=race.js.map