Ошибка PromiseKit 6 в не может конвертировать ошибку - PullRequest
0 голосов
/ 14 декабря 2018

Во-первых, я знаю, что реализация изменилась в v6, и я использую объект seal, как и предполагалось, проблема, с которой я столкнулся, заключается в том, что даже при следовании примеру к букве он по-прежнему дает мне старыйCannot convert value of type '(_) -> CustomerLoginResponse' to expected argument type '(_) -> _' ошибка.

Вот моя функция, которая возвращает обещание:

 static func makeCustomerLoginRequest(userName: String, password: String) -> Promise<CustomerLoginResponse>
{
    return Promise
        { seal in
            Alamofire.request(ApiProvider.buildUrl(), method: .post, parameters: ApiObjectFactory.Requests.createCustomerLoginRequest(userName: userName, password: password).toXML(), encoding: XMLEncoding.default, headers: Constants.Header)
                     .responseXMLObject { (resp: DataResponse<CustomerLoginResponse>) in
                if let error =  resp.error
                {
                    seal.reject(error)
                }
                guard let Xml = resp.result.value else {
                    return seal.reject(ApiError.credentialError)
                }
                seal.fulfill(Xml)
            }
    }
}

, а вот функция, которая его потребляет:

static func Login(userName: String, password: String) {
    ApiClient.makeCustomerLoginRequest(userName: userName, password: password).then { data -> CustomerLoginResponse  in

    }
}

1 Ответ

0 голосов
/ 19 декабря 2018

Возможно, вам придется предоставить больше информации, если вы хотите связать более одной promisesv6 вам нужно использовать .done, если вы не хотите продолжать цепочку обещаний.Если у вас есть только один promise с этим запросом, то ниже приведена правильная реализация.

static func Login(userName: String, password: String) {
    ApiClient.makeCustomerLoginRequest(userName: userName, password: password)
         .done { loginResponse in
              print(loginResponse)
         }.catch { error in
              print(error)
         }
}

Помните, вы должны возвращать promise, если используете .then, пока не разорвите цепочку наиспользуя .done.Если вы хотите объединить несколько promises, то ваш синтаксис должен выглядеть следующим образом:

ApiClient.makeCustomerLoginRequest(userName: userName, password: password)
       .then { loginResponse -> Promise<CustomerLoginResponse> in
             return .value(loginResponse)
        }.then { loginResponse -> Promise<Bool> in
             print(loginResponse)
             return .value(true)
        }.then { bool -> Promise<String> in
             print(bool)
             return .value("hello world")
        }.then { string -> Promise<Int> in
             print(string)
             return .value(100)
        }.done { int in
             print(int)
        }.catch { error in
             print(error)
        }
...