gpt4 book ai didi

ios - RxSwift 可观察竞争条件

转载 作者:行者123 更新时间:2023-11-30 11:42:27 25 4
gpt4 key购买 nike

我有一个通过使用可观察对象的flatMap创建的对象。

private lazy var childObj: chilView? = {

let keychainStore = Realm().getStore()

let selectedElementID = keychainStore.elementID
.asObservable()
.distinctUntilChanged {$0 == $1}
.flatMap({ (elementID) -> Observable<Element?> in
guard let elementID = elementID else {
return Observable.error(Errors.InvalidElementID)
}

return Observable.create { observer in
let elementStream: Observable<Result<Element>> = keychainStore.getObservable(id: elementID)
elementStream.subscribe(onNext: { (result) in
switch result {
case .success(let element):
observer.onNext(element)
default: break
}
})
.disposed(by: self.disposeBag)

return Disposables.create()
}
})

return self.createChildObject(with: selectedElementID)
}()

selectedElement 的类型为 flatMap observable。 createChildObject(with:) 甚至在执行 observer.onNext(element) 之前就被调用。我该如何解决这个问题?

最佳答案

我不确定我是否完全理解您的问题,但这里有一些想法:

这不是竞争条件。在您订阅selectedElementID之前,您的selectedElementID链和其中的flatMap代码不会被执行。因此,我猜您在 createChildObject 方法中的某个位置订阅了 selectedElementID ,并且显然在 selectedElementID 之前执行了 createChildObject 代码链。

根据 keychainStore rx 调用的设计方式以及订阅 selectedElementID observable 的方式,您可能会遇到竞争条件,但我不确定使用 RxSwift在这种情况下, 是一个不错的决定。尝试让你的链更加原子化。

关于ios - RxSwift 可观察竞争条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49183310/

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