У меня есть проект, в котором я использую Moya с расширениями RxSwift. Простые варианты использования работают нормально, я могу выполнять запросы и получать ответы в виде Observables.
public func test() -> Observable<Response> {
return provider
.request(.test)
.retry(5)
}
Затем я могу подписаться на наблюдаемое и без проблем распечатать ответ.
Но теперь мне нужно обработать логику аутентификации. Это работает так: я запускаю вышеуказанный запрос с токеном, добавленным в качестве поля заголовка HTTP. Moya позволяет мне сделать это прозрачно, используя endpointByAddingHTTPHeaderFields в endpointClosure. Пока проблем нет.
Проблема возникает, когда запрос не выполняется со статусом HTTP 401, это означает, что мне нужно повторно пройти аутентификацию, вызвав другую конечную точку.
provider.request(.auth(user, pass)).retry(5)
Это возвращает другой Observable, который я могу легко сопоставить с JSON, чтобы получить новый токен.
Затем мне просто нужно снова вызвать test ()!
Итак, мой вопрос ... Как я могу добавить эту логику аутентификации внутри функции test () выше, чтобы Observable возвращал test () em> уже гарантированно запускает логику повторной аутентификации в случае сбоя и является результатом второго запроса с повторной аутентификацией.
Я новичок в RXSwift и RX в целом, поэтому я немного не понимаю, какие операторы я бы использовал для этого.
Спасибо!