Retrofits 请求的顺序,其中下一个请求取决于上一个请求的结果

Sequence of Retrofits' request where next request depends on result of previous request

我有一系列改造请求:

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)

我该怎么做?

可以使用flatMap,比如

getRequestA().flatMap(a -> getRequestB(a))
             .flatMap(b -> getRequestB1(b))
             .flatMap(b1 -> getRequestB2(b1))
             ...

因为每个 事件 都会使用之前事件中的一些东西,scan 可能是您正在寻找的运算符。

累加器将是组合的可观察值 "up to the current event"。

这是一个示例实现:

    // 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);