如何将可完成任务列表组合成一个可完成结果?
How to combine list of Completable tasks into one Completable result?
我有一个 return 是 Single<List<Item>>
的方法,我想获取此列表中的每个项目并将其传递到下游 return 是 [=12] 的方法=].我想等到每个项目都成功完成并且 return 一个 Completable
结果。我最初的方法是使用 flatMapIterable
单独处理每个项目并使用 toList
合并结果,但我无法在 Completable
对象上调用 toList
。有没有其他方法可以以这种方式将许多 Completable
任务 "aggregate" 合并为一个 Completable
任务?这是我目前所拥有的:
public Single<List<Item>> getListOfItems() {
...
}
public Completable doSomething(Item item) {
...
}
public Completable processItems() {
return getListOfItems()
.toObservable()
.flatMapIterable(items -> items)
.flatMapCompletable(item -> doSomething(item))
.toList() // ERROR: No method .toList() for Completable
.ignoreElements();
}
flatMapCompletable
运算符可以解决问题,您无需进一步应用其他运算符。
来自文档:
Maps each element of the upstream Observable into CompletableSources, subscribes to them and waits until the upstream and all CompletableSources complete.
flatMapCompletable
将 return Completable
将在所有映射的 Completables 完成其操作时完成:
public Completable processItems() {
return getListOfItems()
.toObservable()
.flatMapIterable(items -> items)
.flatMapCompletable(item -> doSomething(item));
}
我有一个 return 是 Single<List<Item>>
的方法,我想获取此列表中的每个项目并将其传递到下游 return 是 [=12] 的方法=].我想等到每个项目都成功完成并且 return 一个 Completable
结果。我最初的方法是使用 flatMapIterable
单独处理每个项目并使用 toList
合并结果,但我无法在 Completable
对象上调用 toList
。有没有其他方法可以以这种方式将许多 Completable
任务 "aggregate" 合并为一个 Completable
任务?这是我目前所拥有的:
public Single<List<Item>> getListOfItems() {
...
}
public Completable doSomething(Item item) {
...
}
public Completable processItems() {
return getListOfItems()
.toObservable()
.flatMapIterable(items -> items)
.flatMapCompletable(item -> doSomething(item))
.toList() // ERROR: No method .toList() for Completable
.ignoreElements();
}
flatMapCompletable
运算符可以解决问题,您无需进一步应用其他运算符。
来自文档:
Maps each element of the upstream Observable into CompletableSources, subscribes to them and waits until the upstream and all CompletableSources complete.
flatMapCompletable
将 return Completable
将在所有映射的 Completables 完成其操作时完成:
public Completable processItems() {
return getListOfItems()
.toObservable()
.flatMapIterable(items -> items)
.flatMapCompletable(item -> doSomething(item));
}