Я хочу, чтобы мое приложение вернулось к исходному вызову API.Вот пример кода:
func getDataFromServer()
{
guard let apiUrl = URL(string: endPoint) else {
return
}
getAccessTokenValue( completionHandler:{ accesstoken in
//if access token is valid continue to get data
//.......
let task = self.apiSession.dataTask(with: apiRequest, completionHandler: {
(data, response, error) in
//Manage response/data/error
})
task.resume()
})
}
func getAccessTokenValue(completionHandlerResult : @escaping (_ accesstoken : String) -> ())
{
var hasAccessTokenExpired = true
// do some calculation
//check if access token has expired
if hasAccessTokenExpired
{
self.renewAccessToken(completionHandler: { accessTokenValue in
completionHandlerResult(accessTokenValue)})
}
else{
completionHandlerResult( accessToken) //return the current access token
}
}
func static func renewAccessToken (completionHandler : @escaping (_ accessTokenValue:String) -> ()) //
{
//another API call to refresh Access Token
//.......
let task = self.apiSession.dataTask(with: apiRequest, completionHandler: {
(data, response, error) in
//Manage response/data/error
//read access token from response
completionHandler(accessToken)
})
task.resume()
}
Проблема, с которой я сталкиваюсь, состоит в том, что когда мой токен доступа больше не действителен, API для токена обновления запускается, но к тому времени, когда задача данных в renewAccessToken завершена, мойприложение уже выполнило завершение getAccessTokenValue и getDataFromServer.Поэтому API, который должен был быть выполнен после получения обновленного токена доступа (в обработчике завершения getDataFromServer для getAccessTokenValue), больше не запускается.
Я не могу выяснить, в чем я ошибся.