如何在 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
}
我创建了一组依赖于可能引发错误的函数的结果的承诺。我可以按照下面的代码所示让它工作,但我不喜欢双 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
}