给定以下方法:
func loadFromCache(url: URL) -> Promise<Array<StockItem>>
func loadFromNetwork(url: URL) -> Promise<Array<StockItem>>
我已经实现了一个返回新 promise 的方法,首先尝试缓存,然后是网络
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)
}
}
}
}
我想上面的方法一定有更好的写法。在没有嵌套闭包的情况下,我如何将它写成一个合适的 promise 链?
换句话说,我怎样才能将两个 promise 合二为一?
最佳答案
您正在寻找的是 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)
}
}
关于ios - promise 套件 : compose two promises into one,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43939069/