我有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
答案 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
表示超时时将不执行任何操作。