Неверное преобразование блока восстановления, 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()
    }

выдает ошибку времени компиляции

недопустимое преобразование из функции выброса типа '(Ошибка) throws -> Поставщик' в тип функции не выброса '(Error) -> Guarantee'

Почему он пытается конвертировать? Мне кажется, он должен использовать эту функцию:

public func restore (on: DispatchQueue? = по умолчанию, политика: PromiseKit.CatchPolicy = по умолчанию, _ body: @escaping (Error) throws -> U) -> PromiseKit.Promise, где U: Тогда можно, Self.T == UT

от 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

Другие вопросы по тегам