首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RxJava的retryWhen算子

RxJava的retryWhen算子
EN

Stack Overflow用户
提问于 2018-11-02 08:57:08
回答 1查看 2.8K关注 0票数 1

我正在努力深入理解retryWhen操作符,下面有一些代码。

代码语言:javascript
复制
    Flowable.just(1, 2, 3, 4, 5)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .retryWhen { throwable ->
                Log.d("Debug", "retryWhen proceed...")
                throw Exception("There is a exception")
            }
            .subscribe(
                    { item ->
                        Log.d("Debug", "success : $item")
                    },
                    { throwable ->
                        Log.d("Debug", "error : ${throwable.message}")
                    },
                    {
                        Log.d("Debug", "complete")
                    }
            )

结果如下所示。

调试: retryWhen继续..。 调试:错误:有一个异常

问题是何时触发retryWhen操作符?

我假设只有在出现异常时才会触发retryWhen操作符。

但结果显然不是我想的那样,

对此有什么想法吗?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-02 09:03:03

retryWhen { errors -> ... }接受一个Observable<Throwable>,并且应该返回一个Observable,该Observable返回任何用于重试的内容,或者返回一个用于停止重试的错误。

一个例子可以是:

代码语言:javascript
复制
.retryWhen(attempts -> {
  return attempts.zipWith(Observable.range(1, 3), (n, i) -> i).flatMap(i -> {
    System.out.println("delay retry by " + i + " second(s)");
    return Observable.timer(i, TimeUnit.SECONDS);
  });
})

(取自http://reactivex.io/documentation/operators/retry.html)

此代码将延迟每次重试。

顺便说一句,在这个方法中,抛出异常不是要做的事情。

Documentation:

* 伟大的博客文章解释了retryWhen

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53115415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档