如何在 promiseKit 中使用带有 throws 返回值的方法

How to use a method with throws returning a value in promiseKit

我创建了一组依赖于可能引发错误的函数的结果的承诺。我可以按照下面的代码所示让它工作,但我不喜欢双 catch 块。我想使用单个 promiseKit catch 块。谁有更好的解决方案?

do {
    let accounts = try Account.getAccounts()
    let mailboxPromises = accounts.map { self.fetchMailboxes([=10=]) }

    when(fulfilled: mailboxPromises).map { _ in
        self.updateBadgeCount()
    }
    .catch { (error) in

    }
} catch  {

}

也许可以将 Account.getAccounts() 包装在一个 promise 中,然后您可以在您的 promise 链中使用它?

func getAccounts() -> Promise<[Account]> {
    return Promise {
        do {
            let accounts = try Account.getAccounts()
            [=10=].fulfill(accounts)
        } catch {
            [=10=].reject(error)
        }
    }
}

更新:

以下信息来自 https://github.com/mxcl/PromiseKit/blob/master/Documentation/CommonPatterns.md 的文档,因此您应该能够使用此模式而不是 do/catch 块。

由于 promises 处理抛出的错误,除非您真的想在本地处理错误,否则不必将对抛出函数的调用包装在 do 块中:

foo().then { baz in
    bar(baz)
}.then { result in
    try doOtherThing()
}.catch { error in
    // if doOtherThing() throws, we end up here
}