如何使用带有引发返回值的诺言工具中的值的方法

时间:2019-02-05 15:32:47

标签: swift promisekit

我创建了一组promise,该promise依赖于可能抛出错误的函数的结果。我可以像下面的代码所示那样使它工作,但是我不喜欢双重捕获块。我想使用单个promiseKit catch块。任何人都有更好的解决方案有效吗?

do {
    let accounts = try Account.getAccounts()
    let mailboxPromises = accounts.map { self.fetchMailboxes($0) }

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

    }
} catch  {

}

1 个答案:

答案 0 :(得分:0)

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

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

更新:

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

由于承诺处理抛出的错误,因此除非您确实想在本地处理错误,否则不必将调用函数的调用包装在do块中:

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