我的應用使用具有短期滿計時器的訪問令牌在進行服務器調用時對用戶進行身份驗證。當使用過期令牌進行呼叫時,服務器以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」的一個實例。它是我自己編寫的一個函數 - 編輯我的代碼以顯示。 –