我一直在项目中使用PromiseKit进行异步请求处理,我的目标是在请求失败时向用户显示登录屏幕。对第一个失败的请求做出反应,删除访问令牌并显示登录屏幕不是问题。问题是多个请求可能同时失败,在用户输入新凭据之前,越来越多的请求开始失败。
我的预期行为是,一旦请求失败,其他请求将暂停/等待,直到登录返回有效的promise并且执行它们为止。
如果有人能为我提供指导,那将非常有帮助。我目前正在考虑这样的解决方案:
func login() -> Promise<Void> {
return Promise { fulfill, reject in
// Tries to present the login screen.
// Fulfill
// - accessToken already stored in Preferences
// - OR
// - successful API call
// Reject
// - if the login screen is being already presented
// - OR
// - failure on API call
}
}
func get(endpoint: Endpoint, params: Params,...) -> Promise<AnyObject> {
// Get API results and error
switch error {
case .Unauthorized:
// Delete the accessToken from Preferences
return login().then {
// Retry the request
}
default:
throw error
}
}