代码之家  ›  专栏  ›  技术社区  ›  Besi

未为promise调用错误处理程序

  •  1
  • Besi  · 技术社区  · 8 年前

    我有一个服务,当我输入错误的登录凭据时会失败。但是,我的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 回复  |  直到 8 年前
        1
  •  5
  •   Blaise    8 年前

    默认情况下 error 不处理取消错误,而错误的凭据恰恰是取消错误。如果你把 print(e.cancelled) 之前 reject(e) ,你会看到它会回来 true 。例如,如果您提供了错误的URL,您将收到 false 为了解决这个问题,只需更换

    }.error { error in
    

    具有:

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

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