java - 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
解决方案
尝试这个
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
表示超时发生时它什么也不做。
推荐阅读
- bash - Bash 脚本 - 如果总是打印 else
- c# - 使用 Swashbuckle Swagger 上传文件
- regex - 如何使用 regx 从字符串中获取日期和时间?
- amazon-web-services - 什么是 ECS 镜像定义文件?
- java - LinkedHashMap 和 NullPointerException
- php - php -ews - 推送通知
- html - Flexbox & Edge:打印时弯曲方向不起作用
- node.js - npm install --production 和 bcrypt 问题,适用于 npm 6.2.0
- ruby-on-rails - 如何按 ActiveStorage 附件名称排序收集?
- postgresql - 错误:整数的无效输入语法:“1 NN