swift – flatMap()在单个事件上调用两次

swift – flatMap()在单个事件上调用两次,第1张

概述我有一个ViewController,在init()中我使用PublishSubject创建一个热流.然后我使用viewDidLoad()中的stream.asObservable()将流传递给我的ViewModel,因为ViewModel具有其他依赖项,这些依赖项是从视图生成的流,因此它必须等到视图的绑定完成才能创建ViewModel.在创建ViewModel之后,我将ViewControlle 我有一个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)

总结

以上是内存溢出为你收集整理的swift – flatMap()在单个事件上调用两次全部内容,希望文章能够帮你解决swift – flatMap()在单个事件上调用两次所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1089317.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-27
下一篇2022-05-27

发表评论

登录后才能评论

评论列表(0条)

    保存