首页 > 解决方案 > RxJava 在第一个 Completable 之后但在返回下一个单曲之前更新数据

问题描述

我需要做的是进行一个可完成的调用(验证会话令牌),然后一旦完成,在下一个请求中更新会话令牌(返回最后一个调用,这是一个单一的)。

这是我到目前为止所拥有的,它可以完成这项工作,但它看起来很乱。必须有一种更清洁的方法来做到这一点?我正在寻找类似于 flatmap() 工作方式的解决方案,但我想返回最后一个单曲。

Single<ItemsResponse> getItems() {

    return verifySessionBeforeApiRequest().andThen
    (Completable.create(new CompletableOnSubscribe() {
        @Override
        public void subscribe(CompletableEmitter e) throws Exception {
            nextRequest.setSession(getSessionId());
            e.onComplete();
        }
    })).andThen(makeFinalCall(nextRequest));
}

标签: javaandroidrx-javarx-java2

解决方案


找到了更好/更清洁的解决方案。我没有返回一个 Completable 的 verifySessionBeforeApiRequest(),而是改变了我的思维过程并让它返回一个包含当前或新 sessionID(如果需要)的 Single。看起来像这样。

 public Single<ItemsResponse> getItems() {
    return verifySessionBeforeApi().flatMap(new Function<String, SingleSource
            <? extends ItemsResponse>>() {
        @Override
        public SingleSource<? extends ItemsResponse> apply(String sessionId)
                throws Exception {
            return makeFinalCall(new nextRequest(sessionId));
        }
    });
}

推荐阅读