問題タブ [reactivex]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - RxJS 5 サブクラス化 Observable - 静的メソッドは親クラスのインスタンスを返します
ここで説明されているように、Observable をサブクラス化し、リフト メソッドをオーバーライドすることで、RxJS Observable クラスをサブクラス化しようとしています。
これは、プロトタイプに追加するすべての演算子で機能しますが、サブクラスの新しい Observable をインスタンス化しようとすると (たとえば、MyObservable.from([1, 2, 3]) を使用して)、親クラスの Observable が取得されます。
Observable.return / Observable.from / を使用して期待どおりに動作するように、Observable を正しくサブクラス化するにはどうすればよいですか? jsbin
android - Android 用に rxcpp をコンパイルする
github から RxCpp をダウンロードし、CMakeLists.txt を次のように変更します (VS2015 でクロス プラットフォーム プロジェクトをビルドするために、Microsoft によって変更された CMake を使用します)。
次のコマンドで Project.sln ソリューションを作成しました。
次の目的で、CMake によってビルドされたプロジェクトを少し調整しました。
- C++11 のサポートを有効にする
- 例外を有効にする
- STL の使用 : GNU STL スタティック ライブラリ (gnustl_static)
次のコードを含む単純な cpp ファイルを追加しました。
プロジェクトがコンパイルされず、何百ものエラーが発生します。この行だけでコンパイルしようとすると:
すべて正常に動作します。私が行った場合
インテリセンスは、いくつかの方法を認識しているようです (あまり多くはありません)。何が起こっているのか分かりません。私は立ち往生しています。誰かが何を試すべきかについて何か提案がありますか? Android 用の RxCpp のコンパイルに成功した人はいますか?
//更新 - 2016 年 3 月 1 日
分析の結果、ほとんどのエラー メッセージはコンパイル エラーではなく、IntelliSense エラーに関連していることが判明しました。したがって、現在、ライブラリは正常にコンパイルされています。次のように、単純な c++ 関数を使用する単純な Xamarin アプリケーションをセットアップしました。
電話でコンパイルして展開すると、すべて正常に動作します(実際には「リアクティブ」コードが使用されていないとしても...)。問題は、次の行のコメントを外すときです。
その後、プログラムは正常にコンパイルされ (エラーなし)、libTest.so が生成されます (サイズはコメント行のあるバージョンのほぼ 2 倍になります) が、Test2() 関数が呼び出されるとすぐに次のようになります。
System.DllNotFOundException: libTest.so
adb.exe で確認したところ、実際には libTest.so が /data/data/"package_name"/lib/ の下に存在します。
どうしたの?
//更新 - 2016 年 6 月 1 日
最後に、問題を再現するレポを準備する時間を見つけました。
https://github.com/easysoft2k15/AndroidRxCppTest.git
私の疑いでは、何らかの理由で、アプリケーションをクラッシュさせる行を含めると、.so lib のサイズが特定の制限を超えて増加し、Android がそれをロードしなくなります。あなたの考えは非常に高く評価されます。
ありがとうございました
アレッサンドロ
java - オブザーバブルを重複するグループに分割し、それらを結合します
一連の整数を指定して、一連の条件に基づいて異なるグループに分割したいと考えています。
- 条件のセットは変更される場合があります
- 各要素は、ゼロ、1 つ、または複数のグループに属することができます。つまり、これらのグループは互いに重複する可能性があります。
たとえば、次のコードは、シーケンス1..12
を 2 と 3 の倍数の 2 つのグループに分割します。
出力:
私の質問は次のとおりです。
- 上記の例では、条件セットが 1 つしかないことに注意してください
divisors
。後で更新するにはどうすればよいですか?変化する変数は、自然にホットなオブザーバブルと考えることができると思います。Observable<Observable<Integer>>
しかし、この場合、 2番目のオブザーバブルでホットを使用する方法がわかりません。 - のように、分割されたグループを特定の順序で結合する方法は
join
? - 問題のより良い解決策はありますか?
system.reactive - subscribeOn と observeOn は、最終的なサブスクライバーによってのみ呼び出されるべきですか?
Intro to RxのScheduling and Threadingセクションでは、次のように述べています。
SubscribeOn と ObserveOn の使用は、最終的なサブスクライバーによってのみ呼び出される必要があります
また、UI アプリケーションでは、通常は最終サブスクライバーであるプレゼンテーション レイヤーが、これらのメソッドを呼び出す必要があるとも述べています。
これが不便な状況がいくつか見られるため、アドバイスがしっかりしているかどうか疑問に思っています。
- まず第一に、プレゼンテーション レイヤーが、データ レイヤーからの Observable をサブスクライブする場所を決定する必要があるとは思いません。私の意見では、データがデータベースから来ているのか、REST API から来ているのか、メモリから来ているのか、プレゼンテーション層は認識しないはずです。このため、
subscribeOn()
Observable を返す前にデータ層が呼び出し、IO スケジューラまたは直接のスケジューラを都合のよいように渡すと便利です。 - プレゼンテーション レイヤーが何らかのサービスまたはユース ケースから Observable を取得し (データ レイヤーから取得)、このサービスが何らかの計算スケジューラでストリームを処理する必要があると判断した場合、なぜプレゼンテーション レイヤーはこれを気にする必要があるのでしょうか?
- 元は UI からのストリームはどうでしょうか。そのため、UI スレッドでサブスクライブする必要があります。次に、何らかのサービスに送信されて何らかの作業が行われ、最終的にプレゼンテーション層に戻って UI スレッドで観察されます。これには、UI ストリームが
subscribeOn()
UI スケジューラ、次にobserveOn()
他のスケジューラ、最後observeOn()
に UI スケジューラである必要があります。この場合、最後のサブスクライバーsubscribeOn()
でobserveOn()
のみ呼び出すことができるということは、ストリームを UI スレッドでのみ処理できることを意味します。
アプリケーションのアーキテクチャを犠牲にし、最終的なサブスクライバーのみがこれら 2 つのメソッドを呼び出すことでスレッドを簡単に切り替える Rx の機能を無視する正当な理由はありますか?
java - Reactivex でオブザーバブルをチェーンする
次のシナリオがあり、RxJava で変換する必要があります。
- ローカル データベースから 30 個のアイテムを取得する
- これらの 30 エントリで API を呼び出します (1 つの要求)
- ローカルデータベースからアイテムを削除します(これにはアイテムリストへのアクセスが必要です)
- ループ (?) db が空になるまでこれを 1 ~ 3 回繰り返したい
私がこれまでに行ったことは次のようになります。
質問:
- publish を呼び出すのは正しいことですか、それとも when/and/then を使用する必要がありますか?
- モデルリストをあるオブザーバブルから別のオブザーバブルに渡すにはどうすればよいですか?
ありがとう
javascript - Rxjs merge() が機能しない
コンテキスト: JSON ツリーを使用して迅速なコードを生成するために、事前注文形式でツリーをトラバースし、すべてのリーフ ノードに到達して、ツリーを効果的に配列にフラット化します。
説明: Rx.Observable.generate() を使用して配列要素から監視可能なストリームを作成していますが、フィルタリングすると奇妙な結果が得られます。以下に、煮詰めた例を示します。
例:
質問:出力結果が期待どおり 0,1,2,3,4,5,6,7,8,9 ではなく、1,3,5,7,9 になるのはなぜですか?
マージを適用する方法は問題ではないようです... 逆にすると、出力 0,2,4,6,8 も得られます。
編集、npm インストール & ノード バージョン user3743222: フィードバックをお寄せいただきありがとうございます。プロジェクトに関する情報は次のとおりです。
java - RxJava を使用して 2 つの Observable の交差を取得するより良い方法はありますか
RxJavaを使用して、同じタイプを発行する別のObservableと交差しようとしている多数のアイテムを発行する1つのソースObservableがあります。いくつかのオプションを検討した結果、物事を構造化するための最も一貫した方法は次のようになります。
ここで期待される出力は、結果の Observable をサブスクライブすると、12 個のアイテムが発行されることです。getMatches の契約により、結果をバッファリングする必要があります。
一見、これは機能するように見えますが、最もクリーンな方法とは思えません。パフォーマンス上の理由から、すべてのアイテムで交差チェックを実行できないため、ここではフィルターが適用されないようです。flatMap をいじってみましたが、ソース オブザーバブルからの完了通知ではなく、getMatches オブザーバブルがストリームを完了します。
これを構造化するより良い方法はありますか?
編集:このスタイルのコードで何が起こっていたのかを明確にするために:
これは明らかにすっきりしていますが、ログを追加すると (元のスニペットと同じデータ サイズを仮定すると:
「処理中」ログの 20 のインスタンスを取得した後、不思議なことに、「処理後」からわずか数行のログ行しか取得しません (12 と予想される場合)。本来よりも早く on complete を呼び出しているようです。多分私は何か間違った構造をしていますか?
c# - Reactivex における配列の概念
こんにちは、ReactiveX c# を使い始めています。概念を除いて、すべて良さそうです。
リアクティブ配列(またはコレクションまたはリスト)の作成方法がわかりません
ObservableCollection のようなものが欲しいのですが、リアクティブの概念があります。つまり、配列のメンバーはどれもリアクティブではなく、Observable コレクションと同じように、配列自体がリアクティブであることを意味します。
リアクティブのすべてが単なるストリームである場合、これを可能にする方法がわかりません...
問題は、リアクティブ配列を取得するために使用するインターフェイスまたはオブジェクトは何ですか?
ありがとう