错误处理程序不要求承诺

我有一项服务,当我输入错误的登录凭据时失败。但是,我的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),您会看到它会返回true例如,如果您输入错误的URL,则会收到false为了解决这个问题,只需更换

}.error { error in

和:

}.error(policy: .AllErrors) { error in

然后error会被触发 如果您使用recover,则默认情况下将处理取消错误。您可以查看https://github.com/mxcl/PromiseKit/blob/master/Sources/Promise.swift#L367了解更多信息。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章