swift – flatMap()在单个事件上调用两次
发布时间:2020-12-14 02:23:57 所属栏目:百科 来源:网络整理
导读:我有一个ViewController,在init()中我使用PublishSubject创建一个热流.然后我使用viewDidLoad()中的stream.asObservable()将流传递给我的ViewModel,因为ViewModel具有其他依赖项,这些依赖项是从视图生成的流,因此它必须等到视图的绑定完成才能创建ViewModel.
我有一个ViewController,在init()中我使用PublishSubject创建一个热流.然后我使用viewDidLoad()中的stream.asObservable()将流传递给我的ViewModel,因为ViewModel具有其他依赖项,这些依赖项是从视图生成的流,因此它必须等到视图的绑定完成才能创建ViewModel.在创建ViewModel之后,我将ViewController中的事件推送到流中,然后期望ViewModel通过触发异步请求(也已用Rx包装)来对事件做出反应.
视图控制器: class ExampleViewController: ViewController { .... private let exampleStream: PublishSubject<Bool> init() { self.exampleStream = PublishSubject<Bool>() } viewDidLoad() { self.viewModel = viewModelFactory.create(exampleStream.asObservable()) self.exampleStream.onNext(true) } .... } 视图模型: class ExampleViewModel { init(stream: Observable<Bool>) { stream.flatMap { _ in doSomethingAsyncThatReturnsAnObservable() } } private func doSomethingAsyncThatReturnsAnObservable() -> Observable<CustomObject> { ... } } 我的问题是当流中只有一个事件时,doSomethingAsyncThatReturnsAnObservable()被调用两次.我用var count = 1检查了这个事实; stream.subscribeNext {_ in print(count)},打印1. 任何想法为什么subscribeNext()在每个事件上触发一次但flatMap()会触发两次?
这是因为flatMap调用了每个订阅.
如果你希望它被调用一次使用shareReplay(1) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |