RxJava-如何根据第二个响应重复两个可观察对象

时间:2019-02-14 14:24:31

标签: android retrofit rx-java

我必须进行两次API调用。

我想在响应呼叫2之后再呼叫1 如果2 resultnotValid,则重试整个序列,最多3次。

任何建议如何做到这一点?

我正在使用retrofit,两个请求都是Observable's

2 个答案:

答案 0 :(得分:1)

假设您的virtual返回一个对象(在这种情况下,Observable会更可取),则将第一个对象的结果映射到第二个对象上,然后有条件地使第二个对象失败并出现错误retry检测到它并完成其工作:

Single

答案 1 :(得分:0)

您需要为此使用switchMap,所以它将类似于:

final PublishSubject<Object> retry = PublishSubject.create()

final Observable<YourObject> twoResponses = retry
    .startWith(new Object())
    .switchMap {
        service.call1()
            .switchMap { response1 -> 
                service.call2()
                    .map { response2 -> /* combine response1 and response2 to YourObject*/}
        }
    }
    .subscribeOn(networkScheduler)
    .observeOn(uiScheduler)
    .replay(1).refCount()

twoResponses.filter { /* need to retry */ }
    .map { new Object() }
    .subscribe(retry)  //don't forget to unsubscribe when activity close