Как отобразить Обещание <T>на Гарантию <Bool>? - PullRequest
1 голос
/ 25 июня 2019

У меня есть Promise<T>, который я хотел бы преобразовать в Guarantee<Bool>, где true означает, что обещание выполнено, и false, если оно было отклонено.

Мне удалось достичь этого с помощью

  return getPromise()
    .map { _ in true }
    .recover { _ in Guarantee.value(false) }

Мне интересно, есть ли более аккуратный способ сделать это.

1 Ответ

0 голосов
/ 21 июля 2019

Вы можете расширить promise, как указано ниже, для удобства использования, указанного в разделе Использование

extension Promise {

    func guarantee() -> Guarantee<Bool> {
        return Guarantee<Bool>(resolver: { [weak self] (body) in
            self?.done({ (result) in
                body(true)
            }).catch({ (error) in
                body(false)
            })
        })
    }
}

Использование:

// If you want to execute a single promise and care about success only.
getPromise().guarantee().done { response in
    // Promise success handling here.
}

// For chaining multiple promises
getPromise().guarantee().then { bool -> Promise<Int> in
        return .value(20)
    }.then { integer -> Promise<String> in
        return .value("Kamran")
    }.done { name in
        print(name)
    }.catch { e in
        print(e)
}
...