Potřebuji pomoc s automaticky opakování žádosti po tom, co jsem si první kód stavu 401 k jakékoliv žádosti. Používám RxSwift a Alamofire takže volání vypadá takto:
public func getSomeEndpointInfo() -> Observable<PKKInfo> {
return Observable.create({ observer in
let request = AF.request(Router.info)
request
.responseDecodable(of: Info.self) { response in
print("response: \(response)")
if response.response?.statusCode == 401 {
observer.onError(NetworkError.unauthorized)
}
guard let decodedItems = response.value else {
observer.onError(NetworkError.invalidJSON)
return
}
observer.onNext(decodedItems)
observer.onCompleted()
}
return Disposables.create()
})
}
Teď v nějaké služby mám následující kód:
service.getSomeEndpointInfo()
.observe(on: MainScheduler.instance)
.subscribe { [unowned self] info in
self._state.accept(.loaded)
} onError: { [unowned self] error in
print("---> Error")
self.sessionManager
.renewToken()
.observe(on: MainScheduler.instance)
.subscribe { token in
print("---> recieved new token")
self.service.getSomeEndpointInfo()
} onError: { error in
print("---> error generating token")
}.disposed(by: self.disposeBag)
}.disposed(by: disposeBag)
S tento kód funguje, ale musím zavolat obnovit token na každý požadavek a jeho vložené do chybová předplatné, které se necítí dobře. Pokud máte nějaký jiný návrh, že na 401 jsem nějak opakovat požadavek a spustit obnovení tokenu, než že bych byl vděčný.