这曾经可以使用,但是与PromiseKit的版本6结合使用时,...
func checkIn(request: CheckinRequest) -> Promise<CheckinResponse> {
let p = checkinService.checkIn(request: request)
.then { r -> Promise<CheckinResponse> in
return .value(r)
}.catch { e in
}
return p
}
Run Code Online (Sandbox Code Playgroud)
...给...
无法将类型“ PMKFinalizer”的返回表达式转换为返回类型“ Promise”
如何添加catch块并继续将链返回给调用函数?
您只需catch按如下所示删除块即可,
func checkIn(request: CheckinRequest) -> Promise<CheckinResponse> {
let p = checkinService.checkIn(request: request)
.then { r -> Promise<CheckinResponse> in
return .value(r)
}
return p
}
Run Code Online (Sandbox Code Playgroud)
此处使用捕获块是无关紧要的,因为它error应该由被调用者处理。
Guarantee类是class进行可丢弃调用的包装器result。所以我们可以创建一个方法来处理,promise这样我们就可以使用.done回调来使用它,result如下所示,
extension Promise {
func result() -> Guarantee<T> {
return Guarantee<T>(resolver: { [weak self] (body) in
self?.done({ (result) in
body(result)
}).catch({ (error) in
print(error)
})
})
}
}
Run Code Online (Sandbox Code Playgroud)
现在你可以简单地做,
let request = CheckinRequest()
checkinService.checkIn(request: request).result().done { response in
// Check in response
}
Run Code Online (Sandbox Code Playgroud)
您仍然可以对多个 Promise 使用链接,如下所示,
checkinService.checkIn(request: request).result().then { (result) -> Promise<Bool> in
// Use reuslt
return .value(true)
}.done { bool in
print(bool)
}.catch { (e) in
print(e)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
410 次 |
| 最近记录: |