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