クイック質問RxJSとWebWorkers
私はその後、観察可能に加入している場合、バックUIコードにObservable<Any>
を返す関数を持っているWebWorker
を持っている場合は、UIスレッドまたはWebWorker
上で観察動作しています糸?
私はUIスレッド
クイック質問RxJSとWebWorkers
私はその後、観察可能に加入している場合、バックUIコードにObservable<Any>
を返す関数を持っているWebWorker
を持っている場合は、UIスレッドまたはWebWorker
上で観察動作しています糸?
私はUIスレッド
にかけた結果のストリームを渡し、私はRxJSでAngular2アプリを書いていますので、この質問を、私は勤勉な観測の一部がWebWorkers内で実行したいパフォーマンスを向上させるために、私はあなたのWebワーカーがあなたのメインスレッドにメッセージを介して観測可能なバックを送信していると仮定します。
メッセージは両方向で使用するためのもので、機能を公開するオブジェクトを送信することはできません。
解決策は、あなたのWebワーカーにメッセージを投稿させてから、メインスレッドサービスでこれらのメッセージを処理し、それらをSubjectにパイプしてアプリケーションにIObservableとして公開することです。
ウェブワーカーメッセージングはチャンネルをサポートしていないので、アプリの複数の領域でメッセージを使用する場合は、独自の弁別器を適用する必要があります。
同様のアーキテクチャのコードサンプルを提供してください。私は用語(メインスレッドサービスとアプリケーション) – supertopi
を理解したいので、Webワーカーとメインスレッド間を移動できる唯一のオブジェクトは単純なデータオブジェクトであると言っています。彼らは連載される必要があるからですか?ありがとう –
@Deanすべての目的と目的のために、はい、ちょうどデータオブジェクト。本質的には、あなたのメインスレッドに 'onmessage'を購読し、受け取ったデータを' onNext() 'を介して' Subject'に送り出すコードが少しあります。この情報を表示する必要があるアプリケーションの部分は、更新を受け取るためにそのサブジェクトにサブスクライブします。 –
簡単な答えは、Rxが、SubscribeOn、ObserveOn、またはBufferのような変換演算子を介して指示しない限り、並行処理を導入しないことです。
したがって、Rx演算子の「購読」部分のコードは、「購読」(onNextなど)という名前の同じスレッドで実行されます。しかし実際のコールバックonNext、onError、onCompleteは、オブザーバが使用するスレッドがあれば実行されますが、オペレータを書いた場合を除いて、これを制御しません。
UIスレッドで確実にコールを受信するには、。ObserveOn(UIDispatcherThread)を追加する必要があります。これにより、呼び出されたスレッドが保証され、テスト可能になります。
希望に役立ちます。
あなたの投稿は問題ではなく、あなたが作ってみようとしているコードサンプルはありません。 – shershen
@ shershen質問をもう一度お読みください。それにはすべての必要な情報が含まれています(欠けているものは疑問符です:) – supertopi