当前位置: 首页 > 知识库问答 >
问题:

Rxjava retryWhen立即调用

宫晟
2023-03-14
public static void main(String[] args) {

    final Observable<Object> observable = Observable.create(emitter -> {
        // Code ... 
    });

    observable.subscribeOn(Schedulers.io())
            .retryWhen(error -> {
                System.out.println("retryWhen");
                return error.retry();
            }).subscribe(next -> System.out.println("subscribeNext"),
                         error -> System.out.println("subscribeError"));

}
retryWhen

Process finished with exit code 0
public static void main(String[] args) throws InterruptedException {

    final Observable<Object> observable = Observable.create(emitter -> {
        emitter.onNext("next");
        emitter.onComplete();
    });

    final CountDownLatch latch = new CountDownLatch(1);
    observable.subscribeOn(Schedulers.io())
            .doOnError(error -> System.out.println("doOnError: " + error.getMessage()))
            .retryWhen(error -> {
                System.out.println("retryWhen: " + error.toString());
                return error.retry();
            }).subscribe(next -> System.out.println("subscribeNext"),
                         error -> System.out.println("subscribeError"),
                         () -> latch.countDown());

    latch.await();
}

重试时间:io.reactivex.subjects.serializedsubject@35fb3008 subscribeNext

进程已完成,退出代码为0

共有1个答案

钱峻
2023-03-14

RetryWhenObserver订阅所提供的函数时调用该函数,这样您就有一个主序列,该序列伴随一个发出主序列失败的Throwable的序列。您应该在这个函数中获得的observable上组合一个逻辑,这样在结尾处,一个throwable将在另一端产生一个值。

Observable.error(new IOException())
    .retryWhen(e -> {
         System.out.println("Setting up retryWhen");
         int[] count = { 0 };
         return e
            .takeWhile(v -> ++count[0] < 3)
            .doOnNext(v -> { System.out.println("Retrying"); });
    })
    .subscribe(System.out::println, Throwable::printStackTrace);

由于E->{}函数体是为每个单独的订阅服务器执行的,因此您可以安全地拥有每个订阅服务器的状态,例如重试计数器。

使用E->e.retry()没有效果,因为输入错误流永远不会调用其onerror

 类似资料:
  • 问题内容: 有一个JSLint选项(实际上是The Good Parts之一),它“需要避免立即调用”,这意味着构造 而是需要写成 我的问题是-谁能解释为什么第二种形式可能会更好?它更具弹性吗?容易出错?与第一种形式相比,它有什么优势? 自问了这个问题之后,我开始理解在功能值和功能值之间进行清晰的视觉区分的重要性。考虑一下立即调用的结果在赋值表达式的右侧的情况: 尽管从语法上讲,最外面的括号不是必

  • 为什么这在Node.js控制台(在4.1.1和5.3.0中测试)中工作,但在浏览器中不工作(在Chrome中测试)? 这个代码块应该创建并调用一个匿名函数,该函数记录。 另外,当上述操作在节点中工作时。js,这不起作用: 也不是这个: 奇怪的是,当添加参数时,它实际上会在立即调用的部分抛出一个。

  • 我希望在指定的持续时间后调用此UIView动画的完成闭包,但它似乎会立即启动。。。 有人经历过这种情况吗?我读过其他人使用中心而不是框架来移动视图更成功,但是我也有同样的问题。

  • 前言 大家学JavaScript的时候,经常遇到自执行匿名函数的代码,今天我们主要就来想想说一下自执行。 在详细了解这个之前,我们来谈了解一下“自执行”这个叫法,本文对这个功能的叫法也不一定完全对,主要是看个人如何理解,因为有的人说立即调用,有的人说自动执行,所以你完全可以按照你自己的理解来取一个名字,不过我听很多人都叫它为“自执行”,但作者后面说了很多,来说服大家称呼为“立即调用的函数表达式”。

  • 问题内容: 我试图创建一个看起来和感觉像标签项的链接,但运行一个函数而不是使用href。 当我尝试将onclick函数应用于链接时,无论该链接从未被单击过,它都会立即调用该函数。此后任何尝试单击链接的尝试都会失败。 我究竟做错了什么? HTML Java脚本 如您所见,我尝试了两种不同的方法来添加此onclick函数,这两种方法具有相同的效果。 问题答案: 你要 不 后者调用(执行),而前者在事件

  • 主要内容:1.将函数转换为IIFE,2.IIFE的要点这是一个JavaScript函数,它会在定义后立即运行。 可以使用IIFE(立即调用函数表达式)来避免从块内部进行变量吊装。 它允许公开访问方法,同时保留函数中定义的变量的私密性。 IIFE是一种设计模式,也称为自执行匿名函数。它包含两个主要部分: 第一部分是具有词法范围的匿名函数,该函数包含在分组运算符中。 第二部分创建IIFE,JavaScript引擎将通过该IIFE直接解释该函数。 语法: