当前位置: 首页 > 知识库问答 >
问题:

为什么不调用此RxJava订阅方法?

霍永年
2023-03-14

我正在学习RxJava。我订阅了一个长时间运行的回调作为可观察回调,并希望看到执行onNext回调:

fun test(){
    fetchNumber(2,4).subscribeOn(Schedulers.io()).doOnSubscribe { println("subscribed") }.subscribe({ println(it)})
}

private fun fetchNumber(a: Int, b: Int) : Observable<Int> {
    return Observable.fromCallable {
        Thread.sleep(4000)
        a + b
    }
}

我希望打印输出“6”,但该方法在此之前完成。

如果我没有在IO调度程序上订阅,那么调用将被阻止,并且我确实看到打印的输出。

我的问题是,如果在IO调度程序上运行,为什么不执行回调。我知道test()方法已终止,但尚未释放对订阅回调的引用。

共有1个答案

程峻
2023-03-14

默认情况下,RxJava使用守护进程线程。您的主要方法在流有机会发出任何东西之前就结束了。添加一些线程。sleep()到主菜单的末尾,或者使用blockingSubscribe。

 类似资料:
  • 我对学习java中的方法还不熟悉。在python中,使用“函数”很容易,但我最近了解到java没有类似的功能。我有一个方法,应该返回n1和n2中的最低值。我在公共静态int函数的行中得到一个错误。。。 但语法似乎没有任何问题。

  • 根据这个线程,conCatMap和flatmap只在项目的发出顺序上有所不同。所以我做了一个测试,创建了一个简单的整数流,并想看看它们将以什么顺序发出。我做了一个小的可观测值,它可以接收1-5之间的数字,然后乘以2。容易的 这是带有平面图的代码: 和使用concatMap的完全相同的代码: 当我在日志中看到打印出来的时候,两者的顺序都是一样的,为什么?我以为只有concatMap才能维持秩序?

  • 1.使用者角度 为企业、组织或个人提供一种信息传播方式,用对口的内容达成企业、组织与成员之间的沟通和知识传播。体现在为用户提供内容服务,传达各类资讯,用户订阅后,可在轻推客户端定期接收到内容资讯的推送 2.开发者角度 主要通过会话的形式为用户提供服务,用户在协同界面点击订阅号图标后,可直接进入与订阅号的聊天界面,开发难度低,支持在后台定制菜单,通过菜单引导用户到不同的去处。通知消息会被折叠在订阅消

  • 例: 注意:是非Android 运行环境, 使用的是RxJava2.x

  • 我只想访问reactor netty项目中的Http内容。但结果为空。 代码如下。 我无法在控制台中获得结果。 我可以像在代码中一样访问请求吗?有人能帮忙吗?谢谢。

  • 我试着读过类似的问题,但没有成功。