Skip to content

Commit 92a255c

Browse files
committed
1.x: switchOnNextDelayError and switchMapDelayError
1 parent c62472c commit 92a255c

File tree

3 files changed

+401
-166
lines changed

3 files changed

+401
-166
lines changed

src/main/java/rx/Observable.java

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2814,7 +2814,36 @@ public static <T> Observable<Boolean> sequenceEqual(Observable<? extends T> firs
28142814
* @see <a href="http://reactivex.io/documentation/operators/switch.html">ReactiveX operators documentation: Switch</a>
28152815
*/
28162816
public static <T> Observable<T> switchOnNext(Observable<? extends Observable<? extends T>> sequenceOfSequences) {
2817-
return sequenceOfSequences.lift(OperatorSwitch.<T>instance());
2817+
return sequenceOfSequences.lift(OperatorSwitch.<T>instance(false));
2818+
}
2819+
2820+
/**
2821+
* Converts an Observable that emits Observables into an Observable that emits the items emitted by the
2822+
* most recently emitted of those Observables and delays any exception until all Observables terminate.
2823+
* <p>
2824+
* <img width="640" height="370" src="https://raw.github.com/wiki/ReactiveX/RxJava/images/rx-operators/switchDo.png" alt="">
2825+
* <p>
2826+
* {@code switchOnNext} subscribes to an Observable that emits Observables. Each time it observes one of
2827+
* these emitted Observables, the Observable returned by {@code switchOnNext} begins emitting the items
2828+
* emitted by that Observable. When a new Observable is emitted, {@code switchOnNext} stops emitting items
2829+
* from the earlier-emitted Observable and begins emitting items from the new one.
2830+
* <dl>
2831+
* <dt><b>Scheduler:</b></dt>
2832+
* <dd>{@code switchOnNext} does not operate by default on a particular {@link Scheduler}.</dd>
2833+
* </dl>
2834+
*
2835+
* @param <T> the item type
2836+
* @param sequenceOfSequences
2837+
* the source Observable that emits Observables
2838+
* @return an Observable that emits the items emitted by the Observable most recently emitted by the source
2839+
* Observable
2840+
* @see <a href="http://reactivex.io/documentation/operators/switch.html">ReactiveX operators documentation: Switch</a>
2841+
* @Experimental The behavior of this can change at any time.
2842+
* @since (if this graduates from Experimental/Beta to supported, replace this parenthetical with the release number)
2843+
*/
2844+
@Experimental
2845+
public static <T> Observable<T> switchOnNextDelayError(Observable<? extends Observable<? extends T>> sequenceOfSequences) {
2846+
return sequenceOfSequences.lift(OperatorSwitch.<T>instance(true));
28182847
}
28192848

28202849
/**
@@ -8637,6 +8666,30 @@ public final <R> Observable<R> switchMap(Func1<? super T, ? extends Observable<?
86378666
return switchOnNext(map(func));
86388667
}
86398668

8669+
/**
8670+
* Returns a new Observable by applying a function that you supply to each item emitted by the source
8671+
* Observable that returns an Observable, and then emitting the items emitted by the most recently emitted
8672+
* of these Observables and delays any error until all Observables terminate.
8673+
* <p>
8674+
* <img width="640" height="350" src="https://raw.github.com/wiki/ReactiveX/RxJava/images/rx-operators/switchMap.png" alt="">
8675+
* <dl>
8676+
* <dt><b>Scheduler:</b></dt>
8677+
* <dd>{@code switchMap} does not operate by default on a particular {@link Scheduler}.</dd>
8678+
* </dl>
8679+
*
8680+
* @param func
8681+
* a function that, when applied to an item emitted by the source Observable, returns an
8682+
* Observable
8683+
* @return an Observable that emits the items emitted by the Observable returned from applying {@code func} to the most recently emitted item emitted by the source Observable
8684+
* @see <a href="http://reactivex.io/documentation/operators/flatmap.html">ReactiveX operators documentation: FlatMap</a>
8685+
* @Experimental The behavior of this can change at any time.
8686+
* @since (if this graduates from Experimental/Beta to supported, replace this parenthetical with the release number)
8687+
*/
8688+
@Experimental
8689+
public final <R> Observable<R> switchMapDelayError(Func1<? super T, ? extends Observable<? extends R>> func) {
8690+
return switchOnNextDelayError(map(func));
8691+
}
8692+
86408693
/**
86418694
* Returns an Observable that emits only the first {@code count} items emitted by the source Observable. If the source emits fewer than
86428695
* {@code count} items then all of its items are emitted.

0 commit comments

Comments
 (0)