gpt4 book ai didi

ios - 依次运行 3 个 observables,使用最后一个中第一个的结果

转载 作者:行者123 更新时间:2023-11-28 05:52:04 25 4
gpt4 key购买 nike

语境

我想使用 RxSwift 依次运行 3 个不同的操作:

  1. 获取产品
  2. 产品获取完成后,删除缓存
  3. 缓存删除完成后,使用第 1 步中的产品保存新缓存

这些是我的服务中的函数定义:

struct MyService {

static func fetchProducts() -> Observable<[Product]> {...}
static func deleteCache() -> Observable<Void> {...}
static func saveCache(_ products: [Product]) -> Observable<Void> {...}

}

我通常使用 flatMapLatest 实现该行为。

但是,我会用这种方法丢失第一个可观察对象 ([Product]) 的结果,因为中间的操作 (deleteCache) 没有收到参数并在完成时返回 Void。

struct CacheViewModel {


static func refreshCache() -> Observable<Void> {
return MyService.fetchProducts()
.flatMapLatest { lostProducts in MyService.deleteCache() }
.flatMapLatest { MyService.saveCache($0) } // Compile error*
}
// * Cannot convert value of type 'Void' to expected argument type '[Product]'

}

编译错误是绝对公平的,因为中间的操作“中断”了第一个结果的传递链。

问题

使用 RxSwift 实现这种串行执行、累积先前操作的结果的机制是什么?

最佳答案

        service
.fetchProducts()
.flatMap { products in
return service
.deleteCache()
.flatMap {
return service
.saveCache(products)
}
}

关于ios - 依次运行 3 个 observables,使用最后一个中第一个的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52590326/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com