Как использовать метод с throws, возвращающий значение в promiseKit

Я создаю набор обещаний, основанный на результатах функции, которая может выдавать ошибку. Я могу заставить это работать, как показано в коде ниже, но мне не нравятся блоки двойного захвата. Я хотел бы использовать один блок catch в поле KitKit. У кого-нибудь есть лучшее решение, которое работает?

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 ответ

Может, обернуть Account.getAccounts() в обещание, которое затем можно использовать в цепочке обещаний?

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
}
Другие вопросы по тегам