恢复块的无效转换,PromiseKit

Posted

技术标签:

【中文标题】恢复块的无效转换,PromiseKit【英文标题】:Invalid conversion of recover block, 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 分成块,以免错过任何内容

【问题讨论】:

【参考方案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

【讨论】:

以上是关于恢复块的无效转换,PromiseKit的主要内容,如果未能解决你的问题,请参考以下文章

Oracle数据库坏块的恢复

北亚数据恢复服务器运行过程中崩溃,管理员重装系统后逻辑卷改变,文件系统破坏,出现了空白超级块的数据恢复案例

状态恢复工作但随后在 viewDidLoad 中无效

如果在此 div 之外和其他可拖动对象内部,则可拖动恢复(使用无效和有效恢复选项)

将图块的 xyz 坐标转换为经度/纬度

将objective-c面向块的api转换为android