【问题标题】:RxJava chain calls that follow an Observable<Void>跟随 Observable<Void> 的 RxJava 链式调用
【发布时间】:2023-03-26 12:17:01
【问题描述】:

我一直在包装一个同步库,所以每个执行 IO 的方法都会返回一个Observable。但是其中一些方法返回Observable&lt;Void&gt;,因为我只关心它的完成。

如何在不发出任何内容的 Observable 之后链接调用?

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

我必须为每个请求调用doAuth,它会返回Observable&lt;Void&gt;。因为它不发出项目,所以永远不会调用 onNext,只会调用 onCompleted

关于doAuth 我只关心它是否完成或出错。如果完成,我希望调用 paginator.next(),以便我可以在 onCompleted/onError/onNext 中实现我自己的逻辑。

到目前为止,我一直在使用 flatMap 链接调用,当我真正关心以前的 Observables 返回的东西时,它工作得很好。

【问题讨论】:

    标签: java android rx-java


    【解决方案1】:

    自从1.1.1 RxJava 发布以来,Completable 完全符合您的要求。您可以返回Completable,而不是返回Observable&lt;Void&gt;

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

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

    【讨论】:

    • 假设我需要执行一些 Completable,然后是 Observable 并在最后订阅,我该怎么做?
    • @Shvalb 在Completeable 中有andThen() 运算符,其作用非常类似于Observable 中的flatMap
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-10
    • 1970-01-01
    • 2020-11-11
    • 1970-01-01
    • 1970-01-01
    • 2019-02-10
    • 1970-01-01
    相关资源
    最近更新 更多