代码之家  ›  专栏  ›  技术社区  ›  Vladyslav Zavalykhatko

恢复块promiseKit的转换无效

  •  0
  • Vladyslav Zavalykhatko  · 技术社区  · 6 年前

    此代码

    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-> 供应商“到非抛出函数类型”(错误)-> 担保

    为什么它试图改变?在我看来,它必须使用这个函数:

    公共函数恢复(on:dispatchqueue?=默认,策略: promiseKit.catchPolicy=默认,u body:@转义(错误)引发-> u)—>承诺套件。承诺位置:启用,self.t==u.t

    来自承诺书

    我添加了显式类型,并将promise划分为块以避免遗漏某些内容

    1 回复  |  直到 6 年前
        1
  •  1
  •   Lory Huz    6 年前

    您应该正确地将承诺返回链,如下所示:

    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