中的PromiseKit 6错误无法转换错误



首先,我知道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
}
}

如果要链接多个promises,则可能需要提供更多信息。在v6中,如果不想继续promise链,则需要使用.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)
}
}

请记住,如果使用.then,则必须返回promise,直到使用.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)
}

相关内容

  • 没有找到相关文章

最新更新