diff --git a/spec/operators/throttleTime-spec.ts b/spec/operators/throttleTime-spec.ts index fef0cd15b3..4e65054ae8 100644 --- a/spec/operators/throttleTime-spec.ts +++ b/spec/operators/throttleTime-spec.ts @@ -141,10 +141,10 @@ describe('throttleTime operator', () => { }); describe('throttleTime(fn, { leading: true, trailing: true })', () => { - asDiagram('throttleTime(fn, { leading: true, trailing: true })')('should immediately emit the first value in each time window', () => { + asDiagram('throttleTime(fn, { leading: true, trailing: true })')('should immediately emit the first and last values in each time window', () => { const e1 = hot('-a-xy-----b--x--cxxx--|'); const e1subs = '^ !'; - const t = time( '----| '); + const t = time( '----| '); const expected = '-a---y----b---x-c---x-|'; const result = e1.pipe(throttleTime(t, rxTestScheduler, { leading: true, trailing: true })); @@ -152,13 +152,23 @@ describe('throttleTime operator', () => { expectObservable(result).toBe(expected); expectSubscriptions(e1.subscriptions).toBe(e1subs); }); + + it('should emit the value if only a single one is given', () => { + const e1 = hot('-a--------------------|'); + const t = time('----| '); + const expected = '-a--------------------|'; + + const result = e1.pipe(throttleTime(t, rxTestScheduler, { leading: true, trailing: true })); + + expectObservable(result).toBe(expected); + }); }); describe('throttleTime(fn, { leading: false, trailing: true })', () => { - asDiagram('throttleTime(fn, { leading: false, trailing: true })')('should immediately emit the first value in each time window', () => { + asDiagram('throttleTime(fn, { leading: false, trailing: true })')('should immediately emit the last value in each time window', () => { const e1 = hot('-a-xy-----b--x--cxxx--|'); const e1subs = '^ !'; - const t = time( '----| '); + const t = time( '----| '); const expected = '-----y--------x-----x-|'; const result = e1.pipe(throttleTime(t, rxTestScheduler, { leading: false, trailing: true })); @@ -167,10 +177,10 @@ describe('throttleTime operator', () => { expectSubscriptions(e1.subscriptions).toBe(e1subs); }); - asDiagram('throttleTime(fn, { leading: false, trailing: true })')('should emit the last throttled value when complete', () => { + it('should emit the last throttled value when complete', () => { const e1 = hot('-a-xy-----b--x--cxx|'); const e1subs = '^ !'; - const t = time('----| '); + const t = time('----| '); const expected = '-----y--------x----(x|)'; const result = e1.pipe(throttleTime(t, rxTestScheduler, { leading: false, trailing: true })); @@ -178,5 +188,15 @@ describe('throttleTime operator', () => { expectObservable(result).toBe(expected); expectSubscriptions(e1.subscriptions).toBe(e1subs); }); + + it('should emit the value if only a single one is given', () => { + const e1 = hot('-a--------------------|'); + const t = time('----| '); + const expected = '-----a----------------|'; + + const result = e1.pipe(throttleTime(t, rxTestScheduler, { leading: false, trailing: true })); + + expectObservable(result).toBe(expected); + }); }); }); diff --git a/src/internal/operators/throttleTime.ts b/src/internal/operators/throttleTime.ts index b5da87585c..5da1540c79 100644 --- a/src/internal/operators/throttleTime.ts +++ b/src/internal/operators/throttleTime.ts @@ -101,6 +101,9 @@ class ThrottleTimeSubscriber extends Subscriber { this.add(this.throttled = this.scheduler.schedule>(dispatchNext, this.duration, { subscriber: this })); if (this.leading) { this.destination.next(value); + } else if (this.trailing) { + this._trailingValue = value; + this._hasTrailingValue = true; } } }