12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- import { isArray } from '../util/isArray';
- import { fromArray } from './fromArray';
- import { OuterSubscriber } from '../OuterSubscriber';
- import { subscribeToResult } from '../util/subscribeToResult';
- export function race(...observables) {
- if (observables.length === 1) {
- if (isArray(observables[0])) {
- observables = observables[0];
- }
- else {
- return observables[0];
- }
- }
- return fromArray(observables, undefined).lift(new RaceOperator());
- }
- export class RaceOperator {
- call(subscriber, source) {
- return source.subscribe(new RaceSubscriber(subscriber));
- }
- }
- export class RaceSubscriber extends OuterSubscriber {
- constructor(destination) {
- super(destination);
- this.hasFirst = false;
- this.observables = [];
- this.subscriptions = [];
- }
- _next(observable) {
- this.observables.push(observable);
- }
- _complete() {
- const observables = this.observables;
- const len = observables.length;
- if (len === 0) {
- this.destination.complete();
- }
- else {
- for (let i = 0; i < len && !this.hasFirst; i++) {
- const observable = observables[i];
- const subscription = subscribeToResult(this, observable, undefined, i);
- if (this.subscriptions) {
- this.subscriptions.push(subscription);
- }
- this.add(subscription);
- }
- this.observables = null;
- }
- }
- notifyNext(_outerValue, innerValue, outerIndex) {
- if (!this.hasFirst) {
- this.hasFirst = true;
- for (let i = 0; i < this.subscriptions.length; i++) {
- if (i !== outerIndex) {
- let subscription = this.subscriptions[i];
- subscription.unsubscribe();
- this.remove(subscription);
- }
- }
- this.subscriptions = null;
- }
- this.destination.next(innerValue);
- }
- }
- //# sourceMappingURL=race.js.map
|