From abac3d1c51dd93412f1ec6ab1d5c5fc8f0e21577 Mon Sep 17 00:00:00 2001 From: OJ Kwon Date: Wed, 13 Apr 2016 20:20:45 -0700 Subject: [PATCH] fix(race): handle observables completes immediately closes #1615 --- spec/operators/race-spec.ts | 10 ++++++++++ src/operator/race.ts | 7 +++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/spec/operators/race-spec.ts b/spec/operators/race-spec.ts index 56d686ac09..58bc000476 100644 --- a/spec/operators/race-spec.ts +++ b/spec/operators/race-spec.ts @@ -1,3 +1,4 @@ +import {expect} from 'chai'; import * as Rx from '../../dist/cjs/Rx'; declare const {hot, cold, expectObservable, expectSubscriptions}; @@ -147,4 +148,13 @@ describe('Observable.prototype.race', () => { expectSubscriptions(e1.subscriptions).toBe(e1subs); expectSubscriptions(e2.subscriptions).toBe(e2subs); }); + + it('should allow observable emits immediately', (done: MochaDone) => { + const e1 = Observable.of(true); + const e2 = Observable.timer(200).map(_ => false); + + Observable.race(e1, e2).subscribe(x => { + expect(x).to.be.true; + }, done, done); + }); }); diff --git a/src/operator/race.ts b/src/operator/race.ts index 73b73ef47e..5a9b38bcb8 100644 --- a/src/operator/race.ts +++ b/src/operator/race.ts @@ -82,6 +82,7 @@ export class RaceSubscriber extends OuterSubscriber { protected _complete() { const observables = this.observables; const len = observables.length; + if (len === 0) { this.destination.complete(); } else { @@ -89,8 +90,10 @@ export class RaceSubscriber extends OuterSubscriber { let observable = observables[i]; let subscription = subscribeToResult(this, observable, observable, i); - this.subscriptions.push(subscription); - this.add(subscription); + if (this.subscriptions) { + this.subscriptions.push(subscription); + this.add(subscription); + } } this.observables = null; }