問題タブ [rxjs5]
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 ポーリング
https://www.youtube.com/watch?v=zlERo_JMGCw 29:38で Matthew Podwysocki イベントを見ていました。
ネットフリックスのスクロールをどのように解決したかを彼が説明しています。以前のデータがクリーンアップされ、さらに追加されると、ユーザーはスクロールしてさらにデータを取得します (ただし、スクロールバックすると、以前のデータが再び表示されます)。
同様のことをしたかったのですが、netflix のデモ コードを入手しました。
しかし、ここのスクロールに従って新しいデータまたはページデータを渡す方法について少し混乱しています。次のことを行う方法について誰かが少し説明できますか:
- 最初のリストを取得します (私はそれを行うことができます)
- ユーザーが下にスクロールすると、さらにリストを取得します (ページングの次のページを使用)
- 以前にフェッチしたデータをメモリから削除し、要求に応じて再フェッチします (上にスクロール)。
javascript - 複雑な RxJS イテレーターのみが表示される行
リクエストごとにリストから 500 行を超える行があり、10 行になることもあれば、巨大になることもあります。
その配列を取り、画面に表示されているものだけを表示し、それ以外はすべて非表示にしたいのですが、ユーザーが下にスクロールすると、他の行が表示され、前の行が非表示になります。
これは少し複雑です。私は RxJS ビデオを見ていましたが、Netflix も同様でした。この効果を得るためにどの関数を使用すればよいかわかりません。
https://gist.github.com/iBasit/8ceef1db9de945a37559 Netflix の例。
私たちのコード:
rxjs - RxJs noop と Identity 関数
私は現在RxJを学んでおり、ヘルパーライブラリの一部である次の2つの関数に出くわしました
と
Rx.helpers.identity(x)の RxJs ヘルパー のドキュメントによると、ドキュメントには、これは渡された値を変更せずに返す関数であると記載されています。Rx.helpers.noop の場合、この関数は実際には何もしないと彼らは言います。
Q: これらの機能を提供する目的は何ですか? また、どのようなシナリオでこれらの機能を使用すると便利ですか?
javascript - rxjs5 - 各オブジェクトに含まれるオブザーバブルによるオブジェクトの配列のフィルタリング
私はこのような配列を持っています
そして、解決が真であるアイテムのみを返したいのですfilter
が、最も効率的で反応的な方法でそれを行うにはどうすればよいですか? rxjs5 beta2 を使用しています。
簡単にするための擬似コードであることに注意してください。私の実際のケースでは、フィルターは実際にはオブジェクトであり、検証関数に渡され、true
またはで解決されるオブザーバブルを返しますfalse
。
javascript - ホット、共有、オブザーバブルの「onNext」でスローされたエラーを処理する適切な方法
RxJS バージョン 5 では、次のコードにより、両方のサブスクリプションを 3 回繰り返した後にプロセスが終了します。
ただし、次のハンドラーでスローされたエラーは、単にその特定のサブスクリプションのサブスクライブを解除し、基になるオブザーバブルを終了させないことを理解していました。私の予想される出力は、「1」のサブスクリプションがサブスクライブを解除することですが、間隔は「2」のサブスクリプションに結果を生成し続けます。
この動作により、基になるホット オブザーバブルに複数のサブスクリプションがある可能性があるという問題が発生しますが、これらのサブスクリプションのいずれかで単一の例外がスローされると、基になるオブザーバブルが完全に終了します。
ホット モジュール リロードを使用して開発している場合は特に厄介です。サブスクリプションでプログラミング エラーが発生すると、ページ全体を更新して監視可能なシーケンスを再開する必要があるためです。
各サブスクリプションを try/catch でラップせずに、次のハンドラーで例外をスローして、その 1 つのサブスクリプションを単にサブスクライブ解除し、基になるオブザーバブルを終了しないようにする方法はありますか?
- - - - - - 編集 - - - - - -
「subscribe」によって返されたサブスクリプション オブジェクトで syncErrorThrowable を true に設定することで、探している動作を見つけました。コードベースでこれが true に設定されるのは、「do」演算子を使用するときだけのようです。
このフィールドを利用する必要がありますか? 私はそれを使用するとかなり汚いと感じますが、一方で、「do」演算子が「next」サブスクリプションハンドラーとは異なるエラー処理セマンティクスを持っているのは奇妙です。
このフラグの影響を受ける主要なコード ブロックは次のとおりです: https://github.com/ReactiveX/RxJS/blob/master/src%2FSubscriber.ts#L132
false に設定すると、次のメソッドが呼び出されます: https://github.com/ReactiveX/RxJS/blob/master/src%2FSubscriber.ts#L179
true に設定されている場合は、代わりに次のメソッドが使用されます: https://github.com/ReactiveX/RxJS/blob/master/src%2FSubscriber.ts#L188
違いは、最初のメソッドは例外をコールスタックに再スローするのに対し、2 番目のメソッドはエラーを後続のサブスクリプションに転送することです。
do 演算子はエラーを前方に伝搬するのに、「next」ハンドラーはエラーをバブルバックするのはなぜですか? これは私には奇妙に思えます。
return-type - 戻り値の型を持つ TypeScript メソッドで Observable から戻る方法
TypeScript で Google ジオコード サービスを使用しています。特定の住所の緯度/経度を取得した後、このメソッドが「GoogleMap」クラスを返す必要があります。
「GoogleMap」型を返す TypeScript メソッドを作成しました。しかし、私は
void でも any でもない関数は、値を返す必要があります...
これが私の方法です:
http 呼び出しが非同期になり、おそらく応答がデータを返す前に、フローがメソッドの最後まで続く必要があることを理解できます。「GoogleMap」を返すには、この Observable を待つ必要がありますか? どうすればこれを行うことができますか?
ありがとう!
更新: 2016年 4 月 21 日、私は最終的に満足できるアプローチを見つけました。「本物の」サービスを懇願する開発者からの投稿がたくさんあることは知っています。サービスに値を渡し、オブジェクトを取得したいと考えています。代わりに、答えの多くは問題を完全には解決しません。単純な答えには、通常、呼び出し側に subscribe() が含まれます。通常は言及されていないこのパターンの欠点は、マッピングする必要があることです。呼び出し元のコールバックでサービスで取得された生データ。コード内のこの 1 つの場所からこのサービスを呼び出すだけであれば、問題ないかもしれません。ただし、通常は、コード内のさまざまな場所からサービスを呼び出します。したがって、毎回、呼び出し元のコールバックでそのオブジェクトを何度もマップします。オブジェクトにフィールドを追加するとどうなるでしょうか? ここで、コード内のすべての呼び出し元を探して、マッピングを更新する必要があります。
だから、ここに私のアプローチがあります。subscribe() から逃れることはできませんし、そうしたくありません。その意味で、私たちのサービスはObservable<T>
、貴重な貨物を持っているオブザーバーで を返します。呼び出し元から、変数 を初期化しObservable<T>
、サービスの を取得しますObservable<T>
。次に、このオブジェクトを購読します。最後に、「T」を取得します。あなたのサービスから。
私の例を見てみましょう。変更に注意してください。まず、ジオコーディング サービス:
そのため、「オブザーバー」内に googleMap オブジェクトをラップしています。呼び出し元を見てみましょう。
次のプロパティを追加します。
発信者:
気づいたら、呼び出し元にマッピングがありません! オブジェクトを取り戻すだけです。複雑なマッピング ロジックはすべて、サービス内で 1 か所で実行されます。そのため、コードの保守性が向上します。お役に立てれば。
javascript - RxJS 5.0の「do while」のような仕組み
単純な短い投票に RxJS を使用しようとしています。delay
サーバー上のロケーションに対して 1 秒ごとに 1 回リクエストを行う必要がpath
あり、2 つの条件のいずれかに到達すると終了します。コールバックisComplete(data)
が true を返すか、サーバーをmaxTries
. 基本的なコードは次のとおりです。
maxTries
ただし、RxJS 5.0 には doWhile が存在しないため、take() 呼び出しのおかげで、サーバーを試行することしかできない条件が機能しますが、isComplete
条件は機能しません。isComplete が true を返すまでオブザーバブルが next() の値になるようにするにはどうすればよいですか。
takeWhile()
ここではうまくいかないことに注意してください。実際には最も重要な最後の値は返されません。
ありがとう!
rxjs5 - RxJS5 で ResumeOnError (または類似) する方法
onErrorResumeNext
RxJS の機能、つまり、エラーが発生しても (終了せずに) イベントを受信し続けたいと考えています。
しかし、次のドキュメントで RxJS5 に対応がないことがわかります: https://github.com/ReactiveX/RxJS/blob/master/MIGRATION.md。
そのような機能を使用するための回避策はありますか? ありがとう!