改造顺序'请求下一个请求取决于先前请求的结果

时间:2015-10-03 07:34:22

标签: rx-java rx-android

我有一系列改造请求:

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)

我怎么能这样做?

2 个答案:

答案 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))
             ...