swift - 恢复 block 的无效转换,PromiseKit

标签 swift generics promisekit

这段代码

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()
    }

给出编译时错误

invalid conversion from throwing function of type '(Error) throws -> Supplier' to non-throwing function type '(Error) -> Guarantee'

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

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

来自 PromiseKit

我添加了显式类型并将 promise 分成 block ,以免遗漏任何内容

最佳答案

您应该返回 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

关于swift - 恢复 block 的无效转换,PromiseKit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51023774/

相关文章:

带有条件模板的 iOS NSRegularExpression

arrays - 多个 Firestore 快照相互覆盖

delphi - Delphi 泛型是否支持下/上类型界限?

ios - PromiseKit `Result.. is unused warning` 位于带有 for 循环的链式序列中

ios - 如何等待具有不同负载的多个 PromiseKit promise ?

swift - 如何在实例化时创建参数

SWIFT 2.2 警告 : Attempt to present TabBar Controller on SignInViewController whose view is not in the window hierarchy

generics - rust 报告在模板化代码时不能移出取消引用

c# - 实例化并转换扩展通用抽象类的类

swift - PromiseKit 如何返回 "when(resolved)"作为 promise ?