我正在执行几个http请求,等待所有请求完成,并使用所有请求(以及其他几个来源)的信息来计算结果。
目前我正在这样做:
Single.zip(observables, { array -> array })
可观察对象只是可观察对象的数组,每个观察对象都执行异步操作。
但是我可以同时执行多少操作有一个限制。一次最多只能有n个操作。 (理想情况下,n为5,但也可以接受1)
不幸的是,Zip似乎在没有等待任何操作完成的情况下开始了所有操作。有没有办法限制这种行为?
答案 0 :(得分:0)
也许您可以结合使用window()
运算符和zip()
?
像这样:
public static void main(String[] args) {
Flowable<Integer>[] flowables = new Flowable[] {
Flowable.just(1), Flowable.just(2), Flowable.just(3), Flowable.just(4), Flowable.just(5),
Flowable.just(6), Flowable.just(7), Flowable.just(8), Flowable.just(9)
};
Flowable.fromArray(flowables)
.window(5)
.flatMap(f -> Flowable.zip(f, objects -> Arrays.stream(objects).map(Object::toString).collect(joining("")))
.flatMapSingle(Single::just))
.subscribe(s -> System.out.println("received: " + s));
Flowable.timer(10, SECONDS) // Just to block the main thread for a while
.blockingSubscribe();
}
window()
会将可流动物分成Flowable
个Flowable
。每个可流动元素仅发射5个元素(可以是您想要的操作数)。
在此示例中,zip()
仅连接了给定的整数。
它将打印:
received: 12345
received: 6789
我希望这会有所帮助。