Skip to content

Commit 51e3b2c

Browse files
authored
feat(onErrorResumeNextWith): renamed onErrorResumeNext and exported from the top level (#6755)
* feat(onErrorResumeNextWith): renamed `onErrorResumeNext` and exported from top level The `onErrorResumeNext` operator is deprecated due to a rename. The rename was done so we can move all operator exports to the top level `rxjs` export site. We were not currently exporting that operator. This commit also refactors to logic to be based on the creation function, which is more widely used * docs: Update import information for onErrorResumeNext, fix info for partition
1 parent b97fa05 commit 51e3b2c

File tree

7 files changed

+44
-44
lines changed

7 files changed

+44
-44
lines changed

api_guard/dist/types/index.d.ts

+3
Original file line numberDiff line numberDiff line change
@@ -499,6 +499,9 @@ export declare function of<A extends readonly unknown[]>(...values: A): Observab
499499
export declare function onErrorResumeNext<A extends readonly unknown[]>(sources: [...ObservableInputTuple<A>]): Observable<A[number]>;
500500
export declare function onErrorResumeNext<A extends readonly unknown[]>(...sources: [...ObservableInputTuple<A>]): Observable<A[number]>;
501501

502+
export declare function onErrorResumeNextWith<T, A extends readonly unknown[]>(sources: [...ObservableInputTuple<A>]): OperatorFunction<T, T | A[number]>;
503+
export declare function onErrorResumeNextWith<T, A extends readonly unknown[]>(...sources: [...ObservableInputTuple<A>]): OperatorFunction<T, T | A[number]>;
504+
502505
export interface Operator<T, R> {
503506
call(subscriber: Subscriber<R>, source: any): TeardownLogic;
504507
}

api_guard/dist/types/operators/index.d.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -191,8 +191,7 @@ export declare function multicast<T, O extends ObservableInput<any>>(subjectFact
191191

192192
export declare function observeOn<T>(scheduler: SchedulerLike, delay?: number): MonoTypeOperatorFunction<T>;
193193

194-
export declare function onErrorResumeNext<T, A extends readonly unknown[]>(sources: [...ObservableInputTuple<A>]): OperatorFunction<T, T | A[number]>;
195-
export declare function onErrorResumeNext<T, A extends readonly unknown[]>(...sources: [...ObservableInputTuple<A>]): OperatorFunction<T, T | A[number]>;
194+
export declare const onErrorResumeNext: typeof onErrorResumeNextWith;
196195

197196
export declare function pairwise<T>(): OperatorFunction<T, [T, T]>;
198197

docs_app/content/guide/importing.md

+3-2
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,12 @@ ending with `With`). Those are:
5656
| [`combineLatest`](/api/operators/combineLatest) | {@link combineLatest} | {@link combineLatestWith} |
5757
| [`concat`](/api/operators/concat) | {@link concat} | {@link concatWith} |
5858
| [`merge`](/api/operators/merge) | {@link merge} | {@link mergeWith} |
59-
| [`onErrorResumeNext`](/api/operators/onErrorResumeNext) | {@link onErrorResumeNext} | - |
60-
| [`partition`](/api/operators/partition) | {@link partition} | - |
59+
| [`onErrorResumeNext`](/api/operators/onErrorResumeNext) | {@link onErrorResumeNext} | {@link onErrorResumeNextWith} |
6160
| [`race`](/api/operators/race) | {@link race} | {@link raceWith} |
6261
| [`zip`](/api/operators/zip) | {@link zip} | {@link zipWith} |
6362

63+
`partition`, the operator, is a special case, as it is deprecated and you should be using the `partition` creation function exported from `'rxjs'` instead.
64+
6465
For example, the old and deprecated way of using [`merge`](/api/operators/merge) from `'rxjs/operators'`
6566
is:
6667

src/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ export { mergeWith } from './internal/operators/mergeWith';
155155
export { min } from './internal/operators/min';
156156
export { multicast } from './internal/operators/multicast';
157157
export { observeOn } from './internal/operators/observeOn';
158+
export { onErrorResumeNextWith } from './internal/operators/onErrorResumeNextWith';
158159
export { pairwise } from './internal/operators/pairwise';
159160
export { pluck } from './internal/operators/pluck';
160161
export { publish } from './internal/operators/publish';

src/internal/observable/onErrorResumeNext.ts

+25-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import { Observable } from '../Observable';
22
import { ObservableInputTuple } from '../types';
3-
import { EMPTY } from './empty';
4-
import { onErrorResumeNext as onErrorResumeNextWith } from '../operators/onErrorResumeNext';
53
import { argsOrArgArray } from '../util/argsOrArgArray';
4+
import { OperatorSubscriber } from '../operators/OperatorSubscriber';
5+
import { noop } from '../util/noop';
6+
import { innerFrom } from './innerFrom';
67

78
/* tslint:disable:max-line-length */
89
export function onErrorResumeNext<A extends readonly unknown[]>(sources: [...ObservableInputTuple<A>]): Observable<A[number]>;
@@ -75,5 +76,26 @@ export function onErrorResumeNext<A extends readonly unknown[]>(...sources: [...
7576
export function onErrorResumeNext<A extends readonly unknown[]>(
7677
...sources: [[...ObservableInputTuple<A>]] | [...ObservableInputTuple<A>]
7778
): Observable<A[number]> {
78-
return onErrorResumeNextWith(argsOrArgArray(sources))(EMPTY);
79+
const nextSources: ObservableInputTuple<A> = argsOrArgArray(sources) as any;
80+
81+
return new Observable((subscriber) => {
82+
let sourceIndex = 0;
83+
const subscribeNext = () => {
84+
if (sourceIndex < nextSources.length) {
85+
let nextSource: Observable<A[number]>;
86+
try {
87+
nextSource = innerFrom(nextSources[sourceIndex++]);
88+
} catch (err) {
89+
subscribeNext();
90+
return;
91+
}
92+
const innerSubscriber = new OperatorSubscriber(subscriber, undefined, noop, noop);
93+
nextSource.subscribe(innerSubscriber);
94+
innerSubscriber.add(subscribeNext);
95+
} else {
96+
subscriber.complete();
97+
}
98+
};
99+
subscribeNext();
100+
});
79101
}

src/internal/operators/onErrorResumeNext.ts renamed to src/internal/operators/onErrorResumeNextWith.ts

+10-36
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,11 @@
1-
import { Observable } from '../Observable';
21
import { ObservableInputTuple, OperatorFunction } from '../types';
3-
import { operate } from '../util/lift';
4-
import { innerFrom } from '../observable/innerFrom';
52
import { argsOrArgArray } from '../util/argsOrArgArray';
6-
import { createOperatorSubscriber } from './OperatorSubscriber';
7-
import { noop } from '../util/noop';
3+
import { onErrorResumeNext as oERNCreate } from '../observable/onErrorResumeNext';
84

9-
export function onErrorResumeNext<T, A extends readonly unknown[]>(
5+
export function onErrorResumeNextWith<T, A extends readonly unknown[]>(
106
sources: [...ObservableInputTuple<A>]
117
): OperatorFunction<T, T | A[number]>;
12-
export function onErrorResumeNext<T, A extends readonly unknown[]>(
8+
export function onErrorResumeNextWith<T, A extends readonly unknown[]>(
139
...sources: [...ObservableInputTuple<A>]
1410
): OperatorFunction<T, T | A[number]>;
1511

@@ -85,7 +81,7 @@ export function onErrorResumeNext<T, A extends readonly unknown[]>(
8581
* Observable, but - if it errors - subscribes to the next passed Observable
8682
* and so on, until it completes or runs out of Observables.
8783
*/
88-
export function onErrorResumeNext<T, A extends readonly unknown[]>(
84+
export function onErrorResumeNextWith<T, A extends readonly unknown[]>(
8985
...sources: [[...ObservableInputTuple<A>]] | [...ObservableInputTuple<A>]
9086
): OperatorFunction<T, T | A[number]> {
9187
// For some reason, TS 4.1 RC gets the inference wrong here and infers the
@@ -94,32 +90,10 @@ export function onErrorResumeNext<T, A extends readonly unknown[]>(
9490
// asserted explicitly.
9591
const nextSources = argsOrArgArray(sources) as unknown as ObservableInputTuple<A>;
9692

97-
return operate((source, subscriber) => {
98-
const remaining = [source, ...nextSources];
99-
const subscribeNext = () => {
100-
if (!subscriber.closed) {
101-
if (remaining.length > 0) {
102-
let nextSource: Observable<A[number]>;
103-
try {
104-
nextSource = innerFrom(remaining.shift()!);
105-
} catch (err) {
106-
subscribeNext();
107-
return;
108-
}
109-
110-
// Here we have to use one of our Subscribers, or it does not wire up
111-
// The `closed` property of upstream Subscribers synchronously, that
112-
// would result in situation were we could not stop a synchronous firehose
113-
// with something like `take(3)`.
114-
const innerSub = createOperatorSubscriber(subscriber, undefined, noop, noop);
115-
nextSource.subscribe(innerSub);
116-
innerSub.add(subscribeNext);
117-
} else {
118-
subscriber.complete();
119-
}
120-
}
121-
};
122-
123-
subscribeNext();
124-
});
93+
return (source) => oERNCreate(source, ...nextSources);
12594
}
95+
96+
/**
97+
* @deprecated Renamed. Use {@link onErrorResumeNextWith} instead. Will be removed in v8.
98+
*/
99+
export const onErrorResumeNext = onErrorResumeNextWith;

src/operators/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ export { mergeWith } from '../internal/operators/mergeWith';
5757
export { min } from '../internal/operators/min';
5858
export { multicast } from '../internal/operators/multicast';
5959
export { observeOn } from '../internal/operators/observeOn';
60-
export { onErrorResumeNext } from '../internal/operators/onErrorResumeNext';
60+
export { onErrorResumeNext } from '../internal/operators/onErrorResumeNextWith';
6161
export { pairwise } from '../internal/operators/pairwise';
6262
export { partition } from '../internal/operators/partition';
6363
export { pluck } from '../internal/operators/pluck';

0 commit comments

Comments
 (0)