gpt4 book ai didi

swift - RxSwift BehaviorRelay 取消之前的调用,只使用最近的

转载 作者:可可西里 更新时间:2023-11-01 00:38:35 28 4
gpt4 key购买 nike

我有一个 BehaviorRelay 设置来存储地址数组,然后我观察那个 BehaviorRelay 以便我可以创建一个 MKAnnotation 数组然后将其显示在 map 上。

let addresses = BehaviorRelay<[Address]>(value: [])

当用户将 map 移动到新区域时,我会发出网络请求。如果用户移动 map 的速度非常快,我可能会收到多个网络请求

我只想要最新的回复。

这就是我的问题开始的地方。

    addresses.asObservable().subscribe(onNext: { [unowned self] (value) in
self.fetchAllAnnotationsAndAddToMap()
}).disposed(by: disposebag)

fetchAllAnnotationsAndAddToMap每次设置地址时都会被调用。

fetchAllAnnotationsAndAddToMap 可能需要很长时间才能完成。运行 fetchAllAnnotationsAndAddToMap 的请求被堆叠起来,所有请求都运行完成。

我想要发生的是,一旦再次设置了 addresses,我希望丢弃所有以前的调用,只使用最新的调用。

我听说这就是 flatMapLatest 的用途。

但是,flatMapLatest 要求我返回一个可观察对象,我对此感到困惑。

如何取消BehaviorRelay更新后调用的方法,只使用最近的方法?

最佳答案

首先,您需要将 fetchAllAnnotationsAndAddToMap() 函数分解为两个函数。然后你可以:

addresses.asObservable()
// you might want to put a `debounce` call in here.
.flatMapLatest { addresses in
return fetchAllAnnotations(from: addresses)
}
.subscribe(onNext: { [weak self] annotations in
self?.addToMap(annotations)
}
.disposed(by: disposeBag)

关于swift - RxSwift BehaviorRelay 取消之前的调用,只使用最近的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54815530/

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