错误处理程序未调用 promise
Error handler not called for promise
我有一项服务,当我输入错误的登录凭据时该服务失败。但是,我的 Promise 错误处理程序没有被调用。
我似乎没有理解我的代码有什么问题,以至于 error
回调永远无法到达。
服务
func loadRepositories() -> Promise<[Repository]>{
return Promise { fullfill, reject in
manager.request(Method.GET, baseURL + "/api/1.0/user/repositories")
.authenticate(user: username, password: password)
.responseArray { (response: Response<[Repository], NSError>) in
switch response.result{
case .Success(let value):
fullfill(value)
case .Failure(let e):
// The breakpoint here is reached.
reject(e)
}
}
}
}
处理
firstly{
service!.loadRepositories()
}.then { repositories -> Void in
loginVC.dismissViewControllerAnimated(true, completion: nil)
self.onLoginSuccessful()
}.always{
// Always gets called
loginVC.isSigningIn = false
}.error { error in
// I never get here even though `reject(e)` is called from the service.
loginVC.errorString = "Login went wrong"
}
默认情况下 error
不处理取消错误,错误的凭据正是取消错误。如果你把 print(e.cancelled)
放在 reject(e)
之前,你会看到它会 return true
。例如,如果您输入错误的 URL,您将收到 false
。为了解决这个问题,只需替换
}.error { error in
与:
}.error(policy: .AllErrors) { error in
和error
将被触发。如果您使用 recover
,默认情况下将处理取消错误。您可以查看 https://github.com/mxcl/PromiseKit/blob/master/Sources/Promise.swift#L367 了解更多信息。
我有一项服务,当我输入错误的登录凭据时该服务失败。但是,我的 Promise 错误处理程序没有被调用。
我似乎没有理解我的代码有什么问题,以至于 error
回调永远无法到达。
服务
func loadRepositories() -> Promise<[Repository]>{
return Promise { fullfill, reject in
manager.request(Method.GET, baseURL + "/api/1.0/user/repositories")
.authenticate(user: username, password: password)
.responseArray { (response: Response<[Repository], NSError>) in
switch response.result{
case .Success(let value):
fullfill(value)
case .Failure(let e):
// The breakpoint here is reached.
reject(e)
}
}
}
}
处理
firstly{
service!.loadRepositories()
}.then { repositories -> Void in
loginVC.dismissViewControllerAnimated(true, completion: nil)
self.onLoginSuccessful()
}.always{
// Always gets called
loginVC.isSigningIn = false
}.error { error in
// I never get here even though `reject(e)` is called from the service.
loginVC.errorString = "Login went wrong"
}
默认情况下 error
不处理取消错误,错误的凭据正是取消错误。如果你把 print(e.cancelled)
放在 reject(e)
之前,你会看到它会 return true
。例如,如果您输入错误的 URL,您将收到 false
。为了解决这个问题,只需替换
}.error { error in
与:
}.error(policy: .AllErrors) { error in
和error
将被触发。如果您使用 recover
,默认情况下将处理取消错误。您可以查看 https://github.com/mxcl/PromiseKit/blob/master/Sources/Promise.swift#L367 了解更多信息。