我有一系列改造请求:
Observable.interval(0, Integer.MAX_VALUE - 1).concatMap(index -> index == 0 ? getRequestA() : getRequestB()).takeUntil(<condition>)
请求B具有必须从请求A等结果中获取的参数
A -> B(p from A.result) -> B1(p from B.result) -> Bn(p from B[n-1].result)
我怎么能这样做?
答案 0 :(得分:1)
因为每个事件都会使用之前的事件,scan可能是您正在寻找的运算符。
累加器将是“直到当前事件”的组合可观察量。
以下是一个示例实现:
// Dummy/sample getRequestB
Func1<Integer, Observable<Integer>> getRequestB = i -> Observable.<Integer>create(sub -> { sub.onNext(2*i+1);sub.onCompleted();});
Observable.range(0, Integer.MAX_VALUE -1)
.scan(Observable.just(0), (acc, rangeIdx) -> acc.concatMap(getRequestB::call))
.concatMap(o -> o)
.takeUntil(i -> i > 100000)
.subscribe(System.err::println);
答案 1 :(得分:0)
您可以使用flatMap
,例如
getRequestA().flatMap(a -> getRequestB(a))
.flatMap(b -> getRequestB1(b))
.flatMap(b1 -> getRequestB2(b1))
...