如果來源 Observable 發射任何項目,DefaultIfEmpty 操作符會完全鏡像來源 Observable。 如果來源 Observable 在沒有發射任何項目的情況下正常終止(使用 onComplete
),則從 DefaultIfEmpty 返回的 Observable 將會在完成之前發射您選擇的預設項目。
待定
待定
RxGroovy 將此操作符實作為 defaultIfEmpty
。
此操作符預設不會在任何特定的 Scheduler 上運作。
defaultIfEmpty(T)
在 RxGroovy 1.1 中還有一個新的操作符叫做 switchIfEmpty
,它不是在來源 Observable 在沒有發射任何項目就終止時發射備份「值」,而是發射來自備份「Observable」的發射。
RxJava 將此操作符實作為 defaultIfEmpty
。
此操作符預設不會在任何特定的 Scheduler 上運作。
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
。
此操作符預設不會在任何特定的 Scheduler 上運作。
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
,但設定預設值的參數是可選的。 如果您不傳遞此預設值,如果來源 Observable 在沒有發射任何東西的情況下完成,defaultIfEmpty
將會發射一個 “null
”。 (請注意,發射一個 “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!