RxJava обновляет данные после первого Completable, но до возвращения следующего сингла - PullRequest
0 голосов
/ 22 мая 2018

Что мне нужно сделать, это сделать завершаемый вызов (проверить токен сеанса), а затем, когда он будет завершен, обновить токен сеанса в следующем запросе (возвращая последний вызов, который является единичным).

Это то, что я имею до сих пор, что делает работу, но выглядит грязно.Должен быть более чистый способ сделать это?Я ищу решение, подобное тому, как работает 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));
}

1 Ответ

0 голосов
/ 22 мая 2018

Нашли лучшее / более чистое решение.Вместо verifySessionBeforeApiRequest (), возвращающего Completable, я изменил свой мыслительный процесс и заставил его возвращать Single, который содержит текущий или новый sessionID (при необходимости).Похоже на это.

 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));
        }
    });
}
...