【问题标题】:Invalid conversion of recover block, PromiseKit恢复块的无效转换,PromiseKit
【发布时间】:2018-06-25 12:42:55
【问题描述】:

这段代码

let promise: Promise<Supplier> = self.supplierController
                        .update(supplier: supplier)

let block: ((Error) throws -> Supplier) = { (error: Error) throws -> Supplier in
    let supplier: Supplier = supplier
    guard (error as NSError).code == 405 else {
        throw error
    }
    return supplier
}

let newPromise = 
promise
    .recover(block)
    .done { (_: Supplier) in
        changeCompanyIdAndAppendMessage()
    }

给出编译时错误

'(Error) throws 类型的抛出函数的无效转换 -> 供应商'到非抛出函数类型'(错误)-> 保证'

为什么它会尝试转换?在我看来,它必须使用这个函数:

public func recover(on: DispatchQueue? = 默认,策略: PromiseKit.CatchPolicy = default, _ body: @escaping (Error) throws -> U) -> PromiseKit.Promise where U : Thenable, Self.T == U.T

来自 PromiseKit

我添加了显式类型并将 promise 分成块,以免错过任何内容

【问题讨论】:

    标签: swift generics promisekit


    【解决方案1】:

    您应该正确返回 Promise 以进行链接,如下所示:

    self.supplierController
        .update(supplier: supplier)
        .recover { error -> Promise<Supplier> in
            let supplier: Supplier = supplier
            guard (error as NSError).code == 405 else {
                throw error
            }
    
            return .value(supplier)
        }
        .done { (_: Supplier) in
            changeCompanyIdAndAppendMessage()
        }
    

    来源:https://github.com/mxcl/PromiseKit/blob/master/Documentation/CommonPatterns.md

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-20
      • 1970-01-01
      • 2019-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多