正确摆脱PromiseKit的正确方法

时间:2018-11-02 01:03:42

标签: 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)

}

我很困惑是将其设置为引发错误的函数,还是返回返回错误的Promise。谢谢

1 个答案:

答案 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)
}