問題タブ [switchmap]
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.
rxjs - RxJS switchMap は、内部のマージされたオブザーバブルをキャンセルしません
内部のマージされたオブザーバブルは、このコードで終了しません (rxjs 5.5.6):
出力は次のとおりです。
予想される出力は次のとおりです。
つまり、2 番目のベクトルが発行された後、switchMap は最初のベクトルのオブザーバブルからサブスクライブを解除し、そのオブザーバブルをキャンセルする必要があります。そして、アンサブスクライブが明らかに機能している間、最初の例からの出力の「do: a0 .. b0 .. c0」による証拠として、内部のオブザーバブルはまだ実行されています。
実際、予想される出力は、まさにこのコードから得られるものです。
しかし、最初の例が同じように動作しないのはなぜでしょうか?
promise - プロミスで使用すると、switchMap オペレーターが最後の値のみを発行するのはなぜですか?
私はこれを理解するのに少し苦労しています。Observable で switchMap オペレーターを使用すると、期待どおりにすべての値が出力されます。
結果:
しかし、Observable を Promise に置き換えると、別の動作になります。
結果:
angular - angular HttpClientを使用したRxJs switchMap
新しいリクエストがトリガーされるたびにユースケースがあり、すでに進行中の http リクエストはキャンセル/無視する必要があります。
例:
- リクエスト #1 の応答に時間がかかりすぎる/ネットワーク接続が遅くなる間に、リクエスト (#2 など) が着信します。
- この場合、#2 はサーバーから非常に迅速な応答を取得し、任意の時点で #1 が応答を返したとしても、観測可能な HTTP 応答は無視する必要があります。
- 私が直面している問題は、最初にコンポーネントがリクエスト#2からの応答値を表示し、リクエスト#1が完了すると再び更新されることです(これは発生しないはずです)。
switchMap はオブザーバブルをキャンセルし、オブザーバブル値が発行される順序を維持すると考えました。
私のservice.tsからの抜粋
上記の実装は機能しません。このユースケースの正しい実装を誰かが理解できますか。