我希望我的应用程序返回到原始的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的结束。因此,在获取刷新的访问令牌(在getDataFromServer的getAccessTokenValue的完成处理程序中)之后应该执行的API不再被触发。
我无法弄清楚我哪里出错了。
答案 0 :(得分:0)
解决了这个问题。当API失败时,没有调用完成处理程序是一个问题。我补充说,现在它完美无缺。