java - 如何通过可迭代/列表动态链接 Observables?
问题描述
我目前正在使用 RxJava,我有这样的东西,
List<Integer> taskIds = ...
Observable.just(new Task(taskIds.get(0)))
.compose(executeWorkFlow())
.filter(Response::isSuccess)
.flatMap(res -> Observable.just(new Task(taskIds.get(1)))
.compose(executeWorkFlow())
.filter(Response::isSuccess)
.flatMap(res -> Observable.just(new Task(taskIds.get(2)))
.compose(executeWorkFlow())
.filter(Response::isSuccess)
...
execute() 是一个执行 API 调用并返回响应的 Transformer,即
ObservableTransformer<Task, Response> execute() { ... }
有没有更好的方法来写这个?鉴于我不知道之前的 Observable 会发出多少个任务 ID。
解决方案
使用fromIterable
,concatMap
和takeUntil(Predicate)
:
Observable.fromIterable(tasks)
.concatMap(task ->
Observable.just(new Task(task))
.compose(executeWorkFlow())
)
.takeUntil(response -> !response.isSuccess)
推荐阅读
- clojurescript - 如何让 CKEditor react 组件在 ClojureScript 中可用
- xml - Azure Devops 中的 IIS Web App Deploy 无法为 .netcore 项目正确转换 web.config
- sql-server - 如何结合使用 datepart 函数和 count 函数?
- elastic-stack - 使用两个不同的日志文件作为输入创建通用日志文件
- mysql - 无法在mysql上建立多个外键,专门在mariaDB和w3schools online mysql上测试过
- sql - 修复连接表函数或不重复值?
- c++ - 为什么 std::vector::iterator::operator-> 只向下钻取一层?
- awkward-array - 如何在笨拙的数组中复制锯齿状数组
- django - 使用 DRF APITestCase 但不是 django 的 TestCase 测试发现失败
- php - 如何在大型 php 字符串变量中设置 if/else 条件?