微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我有一个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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐