【问题标题】:PromiseKit : compose two promises into onePromiseKit : 将两个 Promise 合二为一
【发布时间】:2017-10-11 20:27:40
【问题描述】:

给定以下方法:

func loadFromCache(url: URL) -> Promise<Array<StockItem>>
func loadFromNetwork(url: URL) -> Promise<Array<StockItem>>

我已经实现了一个返回新承诺的方法,首先尝试缓存,然后网络如下

func load(skip: Int, query: String?, onlyInStock: Bool = false) -> Promise<Array<StockItem>> {

    let url = self.urlFor(skip: skip, query: query, onlyInStock: onlyInStock)
    print("Loading: \(url)")

    return Promise { fulfill, reject in
        self.loadFromCache(url: url).then { (items) in
            return fulfill(items)
        }.catch { (error) in
            self.loadFromNetwork(url: url).then { (items) in
                fulfill(items)
            }.catch { (error) in
                reject(error)
            }
        }
    }
}

我认为上面的方法一定有更好的写法。如果没有嵌套闭包,我怎样才能将它写成一个正确的承诺链?

换句话说,我怎样才能将两个承诺合二为一?

【问题讨论】:

标签: ios swift promisekit


【解决方案1】:

您正在寻找的是recover 运算符。

func load(skip: Int, query: String?, onlyInStock: Bool = false) -> Promise<[StockItem]> {
    let url = urlFor(skip: skip, query: query, onlyInStock: onlyInStock)
    return loadFromCache(url: url).recover { _ in
        return loadFromNetwork(url: url)
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-30
    • 2019-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-21
    • 1970-01-01
    • 2015-10-24
    相关资源
    最近更新 更多