【发布时间】:2021-02-23 13:26:49
【问题描述】:
我正在尝试解决 401 错误场景,我想捕获错误,检查错误是否为 401,如果是,
- 刷新 oAuth
- 再次执行相同的 API。
目前,我正在做以下事情:
return urlSession.dataTaskPublisher(for: request)
.tryMap(checkForAPIError)
.tryCatch { (error) -> AnyPublisher<(data: serverData, response: URLResponse), URLError> in
self.fetchoAuthToken()
.tryMap { (token) in
// Saves token
}
.receive(on: RunLoop.main)
.subscribe(on: DispatchQueue.main)
.sink { (completion) in
// Completion handling here
} receiveValue: { (value) in
print("Received \(value)")
}
.store(in: &self.subscription)
return self.urlSession.dataTaskPublisher(for: request)
}
.tryMap(parseJson)
.retry(3)
.receive(on: RunLoop.main)
.eraseToAnyPublisher()
我目前的问题是,虽然 API self.fetchoAuthToken() 仍在执行中,但块返回新请求。然后使用旧令牌执行。
我希望self.fetchoAuthToken() 同步执行,以便在它执行后可以返回并且可以使用新的令牌。
任何帮助将不胜感激。
【问题讨论】: