rxjava当超时跳过项并继续下一项时

时间:2019-06-24 11:51:24

标签: java rx-java2

我有3个物品。当某个项目用完时,我想先跳过该项目,然后继续下一个项目

我使用了一个超时或crunchWithTimeout。这没用

 Observable<String> just = ReplaySubject.just("1", "2", "3");
        just
                .doOnNext( a -> {
                    if("2".equals(a)){
                      TimeUnit.SECONDS.sleep(3);
                    }
                      System.out.println(a);
                })
                .timeout(2,TimeUnit.SECONDS)
                .onErrorResumeNext(o -> {
                    System.out.println("on error");
                }).subscribe();

控制台日志:

1
on error
2

如何实现超时项跳过,然后继续下一项。 我希望输出是:

1
3

1 个答案:

答案 0 :(得分:0)

尝试一下

Observable<String> just = ReplaySubject.just("1", "2", "3");
just
        .flatMap(aa -> Observable.just(aa)
                    .doOnNext(a -> {
                        System.out.println(a);
                        TimeUnit.SECONDS.sleep(3);
                    })
                    .timeout(2, TimeUnit.SECONDS, Observable.empty())
        )
        .subscribe();

每个项目都有超时,这就是为什么有flatMap的原因。使用flatMap,您还可以控制通过maxConcurrency参数同时处理多少个元素。 Observable.empty表示超时时将不执行任何操作。