直到有觀察者訂閱時才創(chuàng)建Observable,并且為每個觀察者創(chuàng)建一個新的Observable
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/defer.c.png" alt="defer" />
Defer
操作符會一直等待直到有觀察者訂閱它,然后它使用Observable工廠方法生成一個Observable。它對每個觀察者都這樣做,因此盡管每個訂閱者都以為自己訂閱的是同一個Observable,事實上每個訂閱者獲取的是它們自己的單獨的數(shù)據(jù)序列。
在某些情況下,等待直到最后一分鐘(就是知道訂閱發(fā)生時)才生成Observable可以確保Observable包含最新的數(shù)據(jù)。
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/defer.png" alt="defer" />
RxJava將這個操作符實現(xiàn)為 defer
方法。這個操作符接受一個你選擇的Observable工廠函數(shù)作為單個參數(shù)。這個函數(shù)沒有參數(shù),返回一個Observable。
defer
方法默認(rèn)不在任何特定的調(diào)度器上執(zhí)行。
defer(Func0)
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/switchCase.png" alt="switchCase" />
可選包 rxjava-computation-expressions
中有一個類似的操作符。switchCase
操作符有條件的創(chuàng)建并返回一個可能的Observables集合中的一個。
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/ifThen.png" alt="ifThen" />
可選包 rxjava-computation-expressions
中還有一個更簡單的操作符叫ifThen
。這個操作符檢查某個條件,然后根據(jù)結(jié)果,返回原始Observable的鏡像,或者返回一個空Observable。