我的应用使用具有短期满计时器的访问令牌在进行服务器调用时对用户进行身份验证。当使用过期令牌进行呼叫时,服务器以402状态作出响应,并且用户必须发送刷新令牌,以提示服务器发送新的访问令牌。然后,我需要使用与首先完全相同的参数进行相同的服务器调用,但现在使用我的新访问令牌。我怎样才能使这个过程自动化,以便令牌交换发生,并且我们获得了我们最初想要的资源,而没有任何用户输入(即它都发生在后台,用户甚至没有意识到)?我想不出不涉及制造可怕的嵌套调用,像这样的方式:如何为令牌交换创建递归回调,Swift
someAPICall(foo, arg2: bar) { result, error in
if let result = result {
if result.status == 402 {
performTokenExchange(refreshToken) { newAccessToken, error in
if newToken {
someAPICall(foo, bar) { result, error in
//...
}
}
}
}
else {
// ... continue with program
}
}
}
我首先想到的是把递归进入画面,并递归调用“someAPICall”中的“performTokenExchange”回调中,但后来我不知道如何处理“someCall”而没有在“performTokenExchange”回调中明确地管理它,让我回到我的“可怕的嵌套呼叫”问题。
因此'someAPICall'是一个给定的函数,你不写自己,但只能调用并传递完成闭包?我问,因为你已经在函数名称前面使用过'func'。 – Keiwan
@Keiwan哎呀!我的错误 - 意味着显示“someAPICall”的一个实例。它是我自己编写的一个函数 - 编辑我的代码以显示。 –