从这样的函数中引发错误的正确方法是什么:
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)
}
我很困惑是将其设置为引发错误的函数,还是返回返回错误的Promise。谢谢
答案 0 :(得分:1)
我真的很讨厌混合隐喻的界面。如果您要返回承诺,请使用承诺的错误系统。如果您想证明自己的理由比我的仇恨更重要,请在呼叫站点上查看其外观:
do {
(try fetch(by: id))
.then {
// do something
}
.catch { error in
// handle error
}
}
catch {
// handle error
}
vs
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)
}