DefaultIfEmpty
выдавать элементы из исходной Observable, или значение по умолчанию, если исходная Observable ничего не выдаёт
Оператор DefaultIfEmpty просто точно копирует исходную Observable, если исходная Observable выдаёт какие-либо элементы. Если исходная Observable завершается нормально (с onComplete) без выдачи каких-либо элементов, Observable, возвращаемая из DefaultIfEmpty, вместо этого выдаст значение по умолчанию по вашему выбору, прежде чем тоже завершится.
См. также
Информация, специфичная для языка
RxGroovy defaultIfEmpty switchIfEmpty
RxGroovy реализует этот оператор как defaultIfEmpty.
Этот оператор по умолчанию не работает с каким-либо конкретным расписанием.
- Javadoc:
defaultIfEmpty(T)
Также есть новый оператор в RxGroovy 1.1 под названием switchIfEmpty , который, вместо выдачи резервного значения, если исходная Observable завершается без выдачи каких-либо элементов, выдаёт элементы из резервной Observable.
RxJava 1․x defaultIfEmpty switchIfEmpty
RxJava реализует этот оператор как defaultIfEmpty.
Этот оператор по умолчанию не работает с каким-либо конкретным расписанием.
- Javadoc:
defaultIfEmpty(T)
Также есть новый оператор в RxJava 1.1 под названием switchIfEmpty , который, вместо выдачи резервного значения, если исходная Observable завершается без выдачи каких-либо элементов, выдаёт элементы из резервной Observable.
Пример кода
Observable.empty().defaultIfEmpty(10).subscribe(
val -> System.out.println("next: " + val),
err -> System.err.println(err) ,
() -> System.out.println("completed")
); next: 10 completed
RxJava 2․x defaultIfEmpty switchIfEmpty
RxJava реализует этот оператор как defaultIfEmpty.
Этот оператор по умолчанию не работает с каким-либо конкретным расписанием.
- Javadoc:
defaultIfEmpty(T)
Пример кода
Flowable.empty().defaultIfEmpty(10).subscribe(
val -> System.out.println("next: " + val),
err -> System.err.println(err) ,
() -> System.out.println("completed")
); next: 10 completed
RxJS defaultIfEmpty
RxJS реализует defaultIfEmpty, но параметр, устанавливающий значение по умолчанию, является необязательным. Если вы не передадите это значение по умолчанию, defaultIfEmpty выдаст “null”, если исходная Observable завершается без выдачи чего-либо. (Обратите внимание, что выдача “null” — это не то же самое, что отсутствие выдачи.)
Пример кода
/* Without a default value */
var source = Rx.Observable.empty().defaultIfEmpty();
var subscription = source.subscribe(
function (x) { console.log('Next: ' + x.toString()); },
function (err) { console.log('Error: ' + err); },
function () { console.log('Completed'); }); Next: null Completed
/* With a defaultValue */
var source = Rx.Observable.empty().defaultIfEmpty(false);
var subscription = source.subscribe(
function (x) { console.log('Next: ' + x.toString()); },
function (err) { console.log('Error: ' + err); },
function () { console.log('Completed'); }); Next: false Completed
defaultIfEmpty присутствует в каждом из следующих дистрибутивов:
rx.jsrx.all.jsrx.all.compat.jsrx.compat.jsrx.lite.jsrx.lite.compat.js
RxPHP defaultIfEmpty
RxPHP реализует этот оператор как defaultIfEmpty.
Возвращает указанное значение Observable, если последовательность пуста.
Пример кода
//from https://github.com/ReactiveX/RxPHP/blob/master/demo/defaultIfEmpty/defaultIfEmpty.php
$source = \Rx\Observable::empty()->defaultIfEmpty(Rx\Observable::of('something'));
$subscription = $source->subscribe($stdoutObserver); Next value: something Complete!
© ReactiveX contributors
Licensed under the Apache License 2.0.
http://reactivex.io/documentation/operators/defaultifempty.html