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

a.a*_*ani 5 mvvm swift swift2 rx-swift

我有一个ViewController在我用它init()创建一个热流PublishSubject.然后我将流传递给我ViewModel使用stream.asObservable()viewDidLoad(),因为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)
    }

    ....
}
Run Code Online (Sandbox Code Playgroud)

视图模型:

class ExampleViewModel {

    init(stream: Observable<Bool>) {
        stream.flatMap { _ in
            doSomethingAsyncThatReturnsAnObservable()
        }
    }

    private func doSomethingAsyncThatReturnsAnObservable() -> Observable<CustomObject> { ... }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是doSomethingAsyncThatReturnsAnObservable()当流中只有一个事件时被调用两次.我通过使用var count = 1; stream.subscribeNext { _ in print(count++) }哪些打印来检查这个事实1.

任何关于为什么subscribeNext()每次事件发生一次flatMap()火灾但两次火灾的想法?

Ser*_*ort 5

这是因为flatMap每次订阅都会被调用。

如果你希望它被调用一次使用shareReplay(1)