rxjava2使用带滤波器重试



我一直在玩 retrywhen()方法,我注意到,如果您使用 filter()retrywhen()和如果 filter()失败,没有执行回调,甚至没有 oncompleted()。你能告诉我为什么会发生这种情况吗?预先感谢。

工作案例:

    Observable.error(new RuntimeException())
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .retryWhen(errors -> errors
                    .filter(throwable -> throwable instanceof RuntimeException)
                    .zipWith(Observable.range(1, 3), (throwable, retryCount) -> {
                        Log.i("lol", "retry " + retryCount);
                        return retryCount;
                    }))
            .subscribe(e -> Log.i("lol", "onNext"), throwable -> Log.i("lol", "onError"), () -> Log.i("lol", "onCompleted"));

工作输出:

I: retry 1
I: retry 2
I: retry 3
I: onCompleted

但是,当我用filter(throwable -> throwable instanceof IOException)更改过滤器时,可观察的可见状态就像在冷冻状态下。没有回电。

Observable.error(new RuntimeException())
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .retryWhen(errors -> errors
                        .filter(throwable -> throwable instanceof IOException)
                        .zipWith(Observable.range(1, 3), (throwable, retryCount) -> {
                            Log.i("lol", "retry " + retryCount);
                            return retryCount;
                        }))
                .subscribe(e -> Log.i("lol", "onNext"), throwable -> Log.i("lol", "onError"), () -> Log.i("lol", "onCompleted"));

您不想在retryWhen()操作员内使用filter()。而是使用if语句或switch语句来确保您对所有情况有完整的覆盖范围。

retryWhen()的工作方式是它可以创建可观察到的功能。当它以onError()方法捕获可抛光的方法时,它会散发出可观察到的可观察到的结果并等待结果。如果没有得到结果,例如当售票被过滤时,它将永远等待。

相关内容

  • 没有找到相关文章

最新更新