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