快速提问
如果我的WebWorker
有一个函数将Observable<Any>
返回给UI代码,那么如果我订阅了Observable,则是在UI线程上运行的observable或{{ 1}}线程?
我问这个问题,因为我正在用RxJS编写一个Angular2应用程序,为了提高性能,我想让一些勤奋的Observable在WebWorkers中运行,将结果流传递给UI线程
答案 0 :(得分:5)
我假设你的网络工作者正在通过一条消息向你的主线程发送一个observable。
消息旨在以两种方式使用,您无法发送公开功能的对象。
解决方案是让您的webworker发布消息,然后让主线程服务处理这些消息并将它们传输到Subject中,并将其作为IObservable公开给您的应用程序。
请记住,网络工作人员的消息传递不支持频道,因此如果您在应用的多个区域使用消息,则需要应用自己的鉴别器。
答案 1 :(得分:2)
简短的回答是,除非您通过SubscribeOn,ObserveOn或某些转换运算符(如Buffer)指示它,否则Rx不会引入并发性。
所以&#34;订阅&#34; Rx运算符的一部分将在您调用的同一个线程中运行.Subscribe(onNext etc)。但是实际的回调onNext,onError和onComplete将在观察者使用的任何线程上运行,你不能控制它(除非你编写了运算符)。
为确保您在UI线程上接收调用,您应该添加.ObserveOn(UIDispatcherThread)。这将保证您重新调用的线程并使其可测试。
希望有所帮助。
答案 2 :(得分:1)