遵循Observable <void>

时间:2016-02-22 19:22:43

标签: java android rx-java

我一直在包装同步库,因此每个执行IO的方法都会返回Observable。然而,其中一些方法会返回Observable<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返回的内容时,它工作正常。

1 个答案:

答案 0 :(得分:4)

由于1.1.1 RxJava的发布版Completable完全符合您的要求。而不是返回Observable<Void>,您可以返回Completable

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

关于Completable的精彩文章:part onepart two