如果源 Observable 发射任何项目,DefaultIfEmpty 操作符将完全镜像源 Observable。如果源 Observable 正常终止(使用 onComplete
)而没有发射任何项目,则从 DefaultIfEmpty 返回的 Observable 将改为在它也完成之前发射你选择的默认项目。
待定
待定
RxGroovy 将此操作符实现为 defaultIfEmpty
。
此操作符默认情况下不会对任何特定的 调度器 进行操作。
defaultIfEmpty(T)
RxGroovy 1.1 中还有一个名为 switchIfEmpty
的新操作符,它不是在源 Observable 终止而没有发射任何项目时发射备用值,而是发射备用Observable 的发射。
RxJava 将此操作符实现为 defaultIfEmpty
。
此操作符默认情况下不会对任何特定的 调度器 进行操作。
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 将此操作符实现为 defaultIfEmpty
。
此操作符默认情况下不会对任何特定的 调度器 进行操作。
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
,但设置默认值的参数是可选的。如果你没有传递这个默认值,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.js
rx.all.js
rx.all.compat.js
rx.compat.js
rx.lite.js
rx.lite.compat.js
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!