未要求承诺的错误处理程序
Posted
技术标签:
【中文标题】未要求承诺的错误处理程序【英文标题】:Error handler not called for promise 【发布时间】:2016-03-25 23:48:12 【问题描述】:我有一项服务,当我输入错误的登录凭据时该服务会失败。但是,我的 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"
【问题讨论】:
【参考方案1】:默认情况下,error
不处理取消错误,错误的凭据正是取消错误。如果你把print(e.cancelled)
放在reject(e)
之前,你会看到它会返回true
。例如,如果您提供错误的 URL,您将收到 false
。为了解决这个问题,只需替换
.error error in
与:
.error(policy: .AllErrors) error in
然后error
将被触发。如果您使用recover
,将默认处理取消错误。您可以查看https://github.com/mxcl/PromiseKit/blob/master/Sources/Promise.swift#L367了解更多信息。
【讨论】:
以上是关于未要求承诺的错误处理程序的主要内容,如果未能解决你的问题,请参考以下文章
Angular 2 错误:未处理的承诺拒绝:模板解析错误:多个组件:
Axios 承诺处理 - 在 react-native 中获取“可能的未处理承诺拒绝 - 类型错误:网络请求失败”
我的应用程序运行良好,但现在显示错误 [未处理的承诺拒绝:TypeError:传播不可迭代实例的无效尝试