Если эти запросы отправляются параллельно, вы, скорее всего, получите несколько ошибок «Invalid Token». Вы хотели бы обновить sh токен только для первого случая ошибки. Чтобы приостановить запросы во время обновления токена, подумайте, что источник действительного токена является наблюдаемым.
Предположим, у вас есть класс обработки сети, который имеет методы:
Single<Response> makeNetworkRequest(Request request) { ... }
Single<Boolean> getToken() { ... }
It реализован таким образом, что значение выводится, когда токен доступен, но в противном случае ожидает его обновления.
Тогда ваша цепочка наблюдателей будет выглядеть примерно так:
observerChain
.flatMapSingle(request -> networkHandler.makeNetworkRequest(request)
.retryWhen(error -> error.flatMapSingle(e -> networkHandler.getToken()))
...
The * Оператор 1011 * восстанавливается после ошибки, предоставляя наблюдаемое, которое, если оно не пустое, будет повторно подписываться на наблюдаемое в восходящем направлении, в данном случае, makeNetworkRequest()
.
, так как вы не показываете свой код что вы пытаетесь адаптировать, вам придется внести изменения в приведенный выше код, чтобы он работал с вашим приложением.