gpt4 book ai didi

scala - RxScala doOnCompleted 调用 .take() 后未触发

转载 作者:行者123 更新时间:2023-12-02 15:38:26 24 4
gpt4 key购买 nike

我是 RxScala Observables 的新手,在组合使用 take(n) 和 doOnCompleted() 时遇到奇怪的行为。

下面我有一个测试示例,我相信第一个订阅是正确的(开头为 take(2)),并输出订阅、下一个、完成和取消订阅方法的所有日志,但是第二个测试( doOnComplete 之后的 take(2) 永远不会到达 doOnCompleted 方法。

import rx.lang.scala.Observable

object Tester extends App {

val obs = Observable.from(List(1,2,3,4))

val obsAddMethodsCorrect = obs.take(2)
.doOnSubscribe( println("subscribe") )
.doOnNext( n => println(s"next $n") )
.doOnError( e => println("error") )
.doOnCompleted( println("completed") )
.doOnUnsubscribe( println("unsubscribe") )

val obsAddMethodsInCorrect = obs
.doOnError( e => println("error") )
.doOnCompleted( println("completed") )
.take(2)
.doOnNext( n => println(s"next $n") )
.doOnUnsubscribe( println("unsubscribe") )
.doOnSubscribe( println("subscribe") )

obsAddMethodsCorrect.toBlocking.subscribe()
println("")
println("The above seems correct. Below seems incorrect")
println("")
obsAddMethodsInCorrect.toBlocking.subscribe()

}

上述测试的当前输出如下。

subscribe
next 1
next 2
completed
unsubscribe

The above seems correct. Below seems incorrect

subscribe
next 1
next 2
unsubscribe

为什么 doOnCompleted() 在第二个示例中没有被触发?

最佳答案

doOnCompleted() 运算符将在触发 onCompleted() 事件时调用其操作。但是,当您在观察者完成发出项目之前取消订阅时,onCompleted() 不会被触发。观察者链被有效取消。

关于scala - RxScala doOnCompleted 调用 .take() 后未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50045438/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com