基于对share
运算符的理解,我编写了以下测试:
@Test
fun `share operator`() {
val expectedInvocations = 1
val counter = AtomicInteger()
val shared = Completable.fromCallable { counter.incrementAndGet() }
.toObservable<Any>()
.share()
.ignoreElements()
Completable.merge(listOf(shared, shared)).test()
assertThat(counter.get()).isEqualTo(expectedInvocations)
}
可以看出,我希望如果我共享一个可观察对象并且多个观察者同时进行订阅,则可调用对象将仅被调用一次。但是,当我运行此测试时,由于可调用项被调用两次,因此它失败。
答案 0 :(得分:1)
http://reactivex.io/RxJava/javadoc/io/reactivex/Completable.html
合并(可迭代的来源)
返回一个Completable实例,该实例立即订阅所有源,并且仅在所有源Completables完成或其中一个发出错误时才完成。
一次订阅所有来源 和 仅在所有源完成项完成时完成
因此,两个可完成对象都将执行操作,使计数器变成2。
有趣的阅读说明分享:https://medium.com/mindorks/how-to-use-rxjava-share-operator-26b08973771a