問題タブ [rxjs]
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.
system.reactive - メッセージ処理のスロットリング/バックプレッシャー
私はメッセージのソースを持っていますObservable
。すべてのメッセージに対して、別の を生成する HTTP 呼び出しを行いたいObservable
ので、それらを と組み合わせて、flatMap
サブスクライバーにシンクします。このシナリオのコードは次のとおりです。
この例は coffeescript で書かれていますが、問題文は他の Rx 実装でも有効だと思います。
このアプローチで私が抱えている問題はloadMessages
、大量のメッセージが非常に迅速に生成されることです。これは、非常に短い時間で大量の HTTP リクエストを行うことを意味します。これは私の状況では受け入れられないため、並列 HTTP リクエストの量を 10 程度に制限したいと考えています。つまり、HTTP リクエストを作成するときに、pipelene を調整するか、ある種の backpresure を適用したいと考えています。
Rx がこの種の状況に対処するための標準的なアプローチやベスト プラクティスはありますか?
現在、システムで処理中のメッセージが多すぎる場合に tick を無視する、非常に単純な (そしてかなり次善の) backpresure メカニズムを実装しました。次のようになります (簡易版)。
しかし、これがもっとうまくできるかどうか、あるいは Rx がこの種の要件に対処するためのメカニズムをすでに備えているかどうかはわかりません。
reactive-extensions-js - RxJS Observable を配列に集める
RxJS を使用して、非同期のイベントの世界を同期の世界と「橋渡し」したいと考えています。具体的には、ある時間間隔で収集されたイベントの配列を返す関数を作成したいと考えています。
私が望むことをするObservableを作成できます
正しい値をうまく印刷できます
これは印刷します
しかし、私が望むのは、この配列を変数に割り当てることです。概念的には、次のようなものが必要です
var collectedDuringSecond = source.toPromise.getValue()
getValue がブロックされるため、上記の行が完了した後、collectedDuringSecond には [0,1,2,3,4,5,6,7,8] が含まれます。
rxjs - zip を含む Rx.Observable.repeat (無期限) により、ブラウザーが応答を停止する
次のコードでは、ブラウザーが応答を停止します。たとえば、繰り返しに「100」などの値を使用すると問題が解決しますが、私の場合、特定の値はありません。解決策を提案してください:
reactive-extensions-js - RxJS 可変長ウィンドウ
windowWithMaxCount のように機能しますが、ウィンドウ サイズは 1 から maxCount に変更されます。
私がやっていることは、イベントの c ストリームに基づいて折れ線グラフを描画することです。折れ線グラフには、たとえば 50 ポイントの配列が必要です。新しいポイントが到着したら、右側に 1 つのポイントを押し出し、この新しいポイントを左側に配置する必要があります。
したがって、一般的に observable.windowWithCount(50,1) はまさにそれを行います。最初のウィンドウで、50 個の要素すべてが利用可能になるまで待たなければならないという唯一の問題。この間、ユーザーの画面には何も表示されません。
代わりに、最初のポイントが到着するとすぐに、サイズ 1 のウィンドウを取得し、次にサイズ 2 のウィンドウを取得し、サイズ 50 (maxCount) のウィンドウに到達するまで続けます。この時点で、後続のすべてのウィンドウのサイズは 50 になります。
画面上の効果は、画面全体を感じるまで、画面を左から右に塗りつぶす行になります。
javascript - RxJS と到達不能要素
オブザーバブルが与えられた場合、サブスクライバーに到達しない要素 (フィルターで除外されるなど) を知り、それに基づいてアクションを実行したいというシナリオがあります。このようなことを達成するための最良のアプローチは何でしょうか?
observable - 次の値を遅らせる Observable を作成する
写真のようにRxJSを使用してオブザーバブルを作成しようとしています。
- 値を取得し、一定時間待機してから次の値を取得します。
- 次のものは、残りをスキップして、待機期間中に発行された最後の値になります。
- 値が発行されなかった場所で待機間隔が過ぎた場合、画像の最後の例が示すように、次の値をすぐに取得する必要があります。
rxjs - RxJS でイベントをタイムアウトするにはどうすればよいですか?
mousedown
の前にイベントが一定期間開催されているかどうかを検出しようとしていmouseup
ます。
そのために作成された Observable で timeout() を使用しfromEvent()
ていますが、タイムアウトは両方の Observable を返します。
以下では、ストリームにサブスクライブすると、mousedown
1 秒以内にトリガーされた場合にイベントが返されますが、1 も返されます。
ただし、これは期待どおりに機能します。
このコードが機能することを望みます:
javascript - RxJs リアクティブ マップは、1 回で十分な場合に 2 回呼び出されます
以下の例では、 onNext 呼び出しごとに map が 2 回呼び出されますが、これは不要です。これは、ds の同じ値を 2 つのオブザーバーに再利用できるためです。マップが onNext 呼び出しごとに 1 回だけ呼び出されるようにコードを記述する方法は? または、約束を使用する必要がありますか?
javascript - リアクティブ式でホット オブザーバブル シーケンスを開始するもの
では、 GitHub の RxJSからの次の例では、マウス移動オブザーバブルが「アクティブ化」されるのはいつですか?つまり、マウス移動イベントのサンプリングを開始するトリガーは何ですか?
サブスクライブは、mousedrag のすべてのオブザーバブルのシーケンスの開始をマークすると思っていましたが、そうではないようです。明らかに、mousedown の前に mousemove イベントがありますが、これらのイベントは使用されません。
任意の洞察をいただければ幸いです。