首页 > 解决方案 > rxjava 超时时跳过项目并继续下一个项目

问题描述

我有 3 个项目。当一个项目运行超时时,我想跳过那个项目并继续下一个项目

我使用超时或throttleWithTimeout。没用

 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

标签: javarx-java2

解决方案


尝试这个

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控制同时处理多少个元素maxConcurrencyObservable.empty表示超时发生时它什么也不做。


推荐阅读