Skip to content

Commit d57fa52

Browse files
authored
feat(never): always return the same instance (#3249)
- never always returns the same Observable instance - Remove NeverObservable - never return value now typed as `Observable<never>` (lol) BREAKING CHANGE: `never()` always returns the same instance BREAKING CHANGE: TypeScript typing for `never()` is now `Observable<never>` and the function no longer requires a generic type.
1 parent 1548393 commit d57fa52

File tree

3 files changed

+48
-61
lines changed

3 files changed

+48
-61
lines changed

spec/observables/never-spec.ts

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
1-
import * as Rx from '../../src/Rx';
1+
import { never } from '../../src/create';
2+
import { expect } from 'chai';
23
import marbleTestingSignature = require('../helpers/marble-testing'); // tslint:disable-line:no-require-imports
34

4-
declare const { asDiagram };
5+
declare const asDiagram: any;
56
declare const expectObservable: typeof marbleTestingSignature.expectObservable;
67

7-
const Observable = Rx.Observable;
8-
98
/** @test {never} */
10-
describe('Observable.never', () => {
9+
describe('never', () => {
1110
asDiagram('never')('should create a cold observable that never emits', () => {
1211
const expected = '-';
13-
const e1 = Observable.never();
12+
const e1 = never();
1413
expectObservable(e1).toBe(expected);
1514
});
15+
16+
it('should return the same instance every time', () => {
17+
expect(never()).to.equal(never());
18+
});
1619
});

src/internal/observable/NeverObservable.ts

Lines changed: 0 additions & 53 deletions
This file was deleted.

src/internal/observable/never.ts

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,40 @@
1-
import { NeverObservable } from './NeverObservable';
1+
import { Observable } from '../Observable';
2+
import { noop } from '../util/noop';
23

3-
export const never = NeverObservable.create;
4+
/** @internal */
5+
export const NEVER = new Observable<never>(noop);
6+
7+
/**
8+
* Creates an Observable that emits no items to the Observer.
9+
*
10+
* <span class="informal">An Observable that never emits anything.</span>
11+
*
12+
* <img src="./img/never.png" width="100%">
13+
*
14+
* This static operator is useful for creating a simple Observable that emits
15+
* neither values nor errors nor the completion notification. It can be used
16+
* for testing purposes or for composing with other Observables. Please note
17+
* that by never emitting a complete notification, this Observable keeps the
18+
* subscription from being disposed automatically. Subscriptions need to be
19+
* manually disposed.
20+
*
21+
* @example <caption>Emit the number 7, then never emit anything else (not even complete).</caption>
22+
* function info() {
23+
* console.log('Will not be called');
24+
* }
25+
* var result = Rx.Observable.never().startWith(7);
26+
* result.subscribe(x => console.log(x), info, info);
27+
*
28+
* @see {@link create}
29+
* @see {@link empty}
30+
* @see {@link of}
31+
* @see {@link throw}
32+
*
33+
* @return {Observable} A "never" Observable: never emits anything.
34+
* @static true
35+
* @name never
36+
* @owner Observable
37+
*/
38+
export function never(): Observable<never> {
39+
return NEVER;
40+
}

0 commit comments

Comments
 (0)