2017-03-16 50 views
1

fromCallabledefer有不同的實現。我聽到有人說defer有助於遞歸,但我無法生成任何顯示它們之間差異的代碼。rxJava 1:fromCallable和defer之間有什麼區別?

我試着用無限數量的實施:

private Observable<Integer> numbers(int start) { 
     return Observable.just(start) 
       .concatWith(Observable.defer(() -> numbers(start + 1))); 
    } 

但訂閱

+0

https://artemzin.com/blog/rxjava-defer-execution-of-function-via-fromcallable/ –

+1

'fromCallable'對於'Observable.defer(() - > Observable.just(值))' –

回答

4

fromCallable創建觀察到發射單個值,然後完成時我仍然得到堆棧溢出異常。

defer推遲創建實際可觀察​​直到它被訂閱。因此,您可以根據訂閱時的狀態創建多值。例如:

Observable<Integer> daysOfWeekLeft = 
    Observable.defer(() -> 
     Observable.range(currentDayOfWeek(), 7 - currentDayOfWeek())); 

基本上可以達到同樣的用fromCallable這樣的:

Observable<Integer> daysOfWeekLeft = 
    Observable.fromCallable(() -> currentDayOfWeek()) 
     .flatMap(day -> Observable.range(day, 7 - day)); 

PS。無限數字流的代碼導致無限遞歸。可能需要使用調度程序來避免這種情況。

相關問題