gpt4 book ai didi

ios - PromiseKit 没有回调/解除分配? (阿拉莫菲尔)

转载 作者:行者123 更新时间:2023-11-29 05:14:29 25 4
gpt4 key购买 nike

我的 promise 链在解决之前就被破坏了(可能被释放)。这种情况发生(到目前为止仅)当我由于主机信任评估而使 Alamofire 请求失败时 -> 强制评估失败,导致 -999 取消等)。

设置相当简单:

API请求:

func start(_ onSuccess:@escaping SuccessBlock, onError:@escaping ErrorBlock) {

do {
try executeRequest { dataResponse in
self.onSuccess(dataResponse)
}

} catch {
self.onError(error)
}
}

其中executeRequest()是:

self.manager.request(request).responseJSON(queue: self.queue) { (response) in

completion(response)
}
<小时/>

然后,PromiseKit 包装器定义为 APIRequest 扩展:(无论哪种情况都会正确调用此包装回调)

func start() -> Promise<APIResponse> {

return Promise<APIResponse> { resolver in

self.start({ response in

resolver.fulfill(response)

}) { error in

resolver.reject(error)
}
}
}
<小时/>

最后,单元测试调用开始 promise (扩展):(如果 Alamofire 失败,流量永远不会到达这个地方)

request.start().done { response in

}.catch { error in
// not called if request failed
}
<小时/>

结果:如果请求失败 -> 调用扩展 Promise 包装器 (catch) block ,但它不会传播回 UnitTest Promise block 。

只需用模拟实现替换 Alamofire 请求(这会触发一些其他错误(使所有设置按预期工作(单元测试完成并调用 catch block 等)例如:

DispatchQueue.global(qos: .default).asyncAfter(deadline: .now() + 2) {
let result = Alamofire.Result { () -> Any in
return try JSONSerialization.data(withJSONObject: [:], options: .fragmentsAllowed)
}
completion(DataResponse<Any>(request: nil, response: nil, data: nil, result: result))
}

这与 Alamofire 有关吗?我真的不知道如何处理那里的 promise (无论如何他们不应该取消分配......或者这是 PromiseKit 中的错误吗?Alamofire?我还必须在应用程序本身中测试它(也许这是单元测试问题.. .)

查看相关问题 -> 我肯定会解决任何流程路径的 promise (履行/拒绝)。

我不明白 Alamofire 请求与 DispatchAsync 有什么不同(后者按预期工作)。

最佳答案

我只用了 10 分钟就找到了答案...问题也在这里描述: https://github.com/mxcl/PromiseKit/issues/686

问题是“-999 已取消”错误未被 PromiseKit 视为“错误”。解决方案是使用“catch(policy: .allErrors)” - 然后按预期调用 catch block 。

关于ios - PromiseKit 没有回调/解除分配? (阿拉莫菲尔),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59323110/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com