問題タブ [reactive-extensions-js]
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 - flatMapLatest でエラーを処理して再試行する
ユーザーがクリックできるアイテムがたくさんある Web ページがあります。アイテムをクリックすると、そのタイプに応じて ajax リクエストがサーバーに送信され、さらにアイテムが表示されます。リクエストがエラーになった場合は、それを表示して、ユーザーが以前と同じようにページをクリックしたり操作したりできるようにしたいと考えています。
私のコードは次のようになります
エラーケースはどこで正確に処理できますか? エラーが発生することを予期しており、常にソースを再サブスクライブしたいと考えていますが、そのエラーを処理する機会が必要です。
javascript - Angular を使用して RxJS でエラーを処理する方法
RESTful API から取得したアイテムのリストを表示する Angular アプリケーションに取り組んでいます。リストの内容はクエリによって異なります。クエリは、入力フィールドに入力するか、送信ボタンを使用するか、クエリ パラメータとして URL に追加することで渡すことができます。
すべてが正常に実行され、非同期の問題が発生しないようにするために、私はRxJSを使用しています。
エラーはストリームの途中で発生する可能性があるため、エラーをどのように処理できるか疑問に思っています。HTTP リクエストが失敗したとき。
入力ストリームとしてのクエリ
これらは 2 つでObservables
、どちらも一連のクエリを送信します。
結果のフェッチ
以下Observable
は、クエリが変更されたときにトリガーされ、API から結果をフェッチします。
エラー処理
たとえば、エラーを処理する方法がわかりません。エラーがgetResultsForQuery
スローされます。結果の代わりにエラーを表示したいのですが、 がObservable
新しいイベントを処理できないようにします。
現在、Observable から 2 つの新しいストリームを作成することで解決しました。1 つは成功時の結果を処理するためのもので、もう 1 つはエラーが発生した場合のものです。クエリが無効だった場合の応答データには、error
プロパティが含まれています。
成功の流れ
エラー ストリーム
可能な解決策
エラーのスローとキャッチについて読んだことがありますが、ここでの問題は、最初のエラーの後にストリームが停止したように見え、新しいイベントをトリガーしないことです。
エラーを無視し、エラー後にストリームが継続することを確認するための使用方法
onErrorResumeNext
がドキュメントに記載されています。しかし、エラーを正しく「処理」してエンド ユーザーに表示する方法が見つかりません。
質問
このような状況でエラーを処理する方法について推奨されるアプローチはありますか? これには 2 つのストリームを作成する必要がありますか、それとも例外をスローすることをお勧めしますか?
何か問題が発生したことをユーザーが認識し、最初のエラーの後でストリームが停止しないことが重要です。
javascript - サブスクライバーが更新される順序を確認する
サブスクライバーが更新される順序を確実にする方法はありますか?
ホットなオブザーバブルがあり、最初のサブスクライバーは変数を更新するために同期作業を行い、次のサブスクライバーはサービスを初期化する必要があります (一度だけ!)、その変数が確実に設定された後にのみ!
次のようになります。
次のようになりApp.init
ます。
これは現在機能していますが、常に100%注文に従うかどうかはわかりません.
編集:
私が聞いたように、サブスクライバーは FIFO で呼び出されます。そのため、順序はある程度保証されています。
javascript - サブスクライバーがいる場合にのみ起動し、新しいサブスクライバーに最新の値をすぐに提供する Observable を作成する方法
ストリーム/オブザーバブルを作成しようとしています...
- サブスクライバーがある場合にのみイベントを出力します
- 新しいサブスクライバーに最新の値を提供します。
具体的なケースは、特定のイベントが発生するたびに Async API 呼び出しを行うオブザーバブルが必要ですが、サブスクライバーがある場合のみです。不要な API 呼び出しを回避しようとしています。
このようなサブスクライバーがいる場合にのみ起動するストリームを作成することができました...
そして、これは機能します。console.log(...)
メソッド内にある場合SomeAPI.someDataGet
、ストリームにサブスクライバーがいる場合にのみ起動します。私の実装は、React コンポーネントのライフサイクル メソッドに非常にうまく適合するサブスクライブとサブスクライブ解除のためにこれを行うため、非常に見栄えがします。
また、新しいサブスクライバーがサブスクライブするとすぐに最新の値を受け取るようにしたいと考えています。これは私が苦労しているところです。私がこれをしたら...
...次の間隔までconsole.log
forが表示されません。sub2
私の理解が正しければ。Hot Observableが必要です。だから私はこのようなストリームを作成しようとしました...
私が理解しているようにdataStream
、hot observable
.
ただし、私のテストでは、2 番目のサブスクリプションは次の間隔までデータを受信しません。さらに、これにより、サブスクライブ時に dataStream を接続および切断する必要が生じますが、これは可能であれば避けたいものです。
私は RxJS にまったく慣れていないので、ここで何が起こっているのかを誤解していても驚かないでしょう。
javascript - RxJS Observable:最後のサブスクリプションが破棄されたときにクリーンアップを実行しますか?
RxJS Observableの最後のサブスクリプションが破棄されたときに副作用を実行する最もクリーンな方法は何ですか? これは、Observable が終了する前に発生する可能性があります。
Observable
リソースに変更を発行する を返す関数が必要だとしましょう。すべてのサブスクリプションが破棄されたときに、クリーンアップ アクションを実行したいと考えています。
サブスクリプションの破棄アクションを定義する唯一の方法は、 を使用することRx.Observable.create
です。最後の破棄は、たとえば とサブスクリプションを共有することで処理できますObservable.prototype.singleInstance()
。
例えば:
doOnNext
または と同様に、サブスクリプションの破棄の副作用を定義するより適切な方法はありますdoOnCompleted
かdoOnError
?