2016-02-22 17 views
2

我一直包裝同步庫,因此每個IO方法都會返回Observable。然而,其中一些方法返回Observable<Void>,因爲我只關心它的完成。遵循Observable的RxJava鏈調用<Void>

如何在不發射任何東西的Observable之後連鎖呼叫?

accountManager.doAuth() 
      .flatMap(x -> paginator.next()) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribeOn(Schedulers.io()) 
      .subscribe(... subscriber stuff ...) 

我要叫doAuth爲每個請求並返回Observable<Void>。由於它不排放物品,所以從不叫onNext,只有onCompleted

關於doAuth我只關心它是否完成或出現錯誤。如果它完成,我希望paginator.next()被調用,所以我可以在onCompleted/onError/onNext中實現我自己的邏輯。

到現在爲止,我一直在使用flatMap來鏈接調用,並且在我真正關心之前的Observables返回的事情時它工作正常。

回答

4

自發布1.1.1RxJavaCompletable完全符合您的要求。而不是返回的Observable<Void>你可以返回Completable

public Completable doAuth(){ 
    return Completable.create(subscriber -> { 
     //do auth 
     if(authOk) subscriber.onCompleted(); 
     else subscriber.onError(throwable); 
    }); 
} 

Completable大文章:part onepart two

+0

認爲我需要執行幾個Completable的,然後觀察到的,在最後認購,我怎樣才能做到這一點? – Shvalb

+1

@Shvalb在'Completeable'中有'和Then()'操作符,它在'Observable'中的行爲非常像flatMap –