使用以下内容,您可以调用handleRequest
而不是 Alamofire 的请求
import Alamofire
import PromiseKit
enum ServerError: ErrorType {
case Unauthorized
// add others as necessary
}
func handleRequest(method: Alamofire.Method, _ URLString: URLStringConvertible, parameters: [String: AnyObject]? = nil) -> Promise<AnyObject> {
return request(method, URLString, parameters: parameters).recover { error -> AnyObject in
switch error {
case ServerError.Unauthorized:
return login().then {
request(method, URLString, parameters: parameters)
}
default:
throw error
}
}
}
private func request(method: Alamofire.Method, _ URLString: URLStringConvertible, parameters: [String: AnyObject]? = nil) -> Promise<AnyObject> {
return Promise { fulfill, reject in
Alamofire.request(method, URLString, parameters: parameters).responseJSON { response in
switch response.result {
case .Success(let json):
fulfill(json)
case .Failure(let error):
if response.response?.statusCode == 401 {
reject(ServerError.Unauthorized)
}
else {
reject(error)
}
}
}
}
}
private func login() -> Promise<Void> {
// do what you need here...
return Promise()
}