Правильный способ ошибиться из PromiseKit
Как правильно вывести ошибку из функции, подобной этой:
func fetch(by id: String, page: Int = 1) -> Promise<ProductReviewBase> {
// call api
guard let url = URL(string: "") else {
return Promise { _ in return IntegrationError.invalidURL }
}
return query(with: url)
}
Я не уверен, стоит ли делать это функцией, которая выдает ошибку, или возвращать обещание, которое возвращает ошибку. Спасибо
1 ответ
Решение
Я действительно ненавижу интерфейсы, которые смешивают метафоры. Если вы собираетесь вернуть обещание, используйте систему ошибок обещания. Если вы хотите больше оправдания, чем моя ненависть, то представьте, как это будет выглядеть на сайте вызовов:
do {
(try fetch(by: id))
.then {
// do something
}
.catch { error in
// handle error
}
}
catch {
// handle error
}
против
fetch(by: id)
.then {
// do something
}
.catch { error in
// handle error
}
Последний выглядит намного чище.
Вот лучший способ (IMO) написать пример функции:
func fetch(by id: String, page: Int = 1) -> Promise<ProductReviewBase> {
guard let url = URL(string: "") else { return Promise(error: IntegrationError.invalidURL) }
return query(with: url)
}