問題タブ [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.

0 投票する
0 に答える
1305 参照

rxjs - RxJS switchMap は、内部のマージされたオブザーバブルをキャンセルしません

内部のマージされたオブザーバブルは、このコードで終了しません (rxjs 5.5.6):

出力は次のとおりです。

予想される出力は次のとおりです。

つまり、2 番目のベクトルが発行された後、switchMap は最初のベクトルのオブザーバブルからサブスクライブを解除し、そのオブザーバブルをキャンセルする必要があります。そして、アンサブスクライブが明らかに機能している間、最初の例からの出力の「do: a0 .. b0 .. c0」による証拠として、内部のオブザーバブルはまだ実行されています。

実際、予想される出力は、まさにこのコードから得られるものです。

しかし、最初の例が同じように動作しないのはなぜでしょうか?

0 投票する
1 に答える
704 参照

promise - プロミスで使用すると、switchMap オペレーターが最後の値のみを発行するのはなぜですか?

私はこれを理解するのに少し苦労しています。Observable で switchMap オペレーターを使用すると、期待どおりにすべての値が出力されます。

結果:

しかし、Observable を Promise に置き換えると、別の動作になります。

結果:

0 投票する
2 に答える
14124 参照

angular - angular HttpClientを使用したRxJs switchMap

新しいリクエストがトリガーされるたびにユースケースがあり、すでに進行中の http リクエストはキャンセル/無視する必要があります。

  • リクエスト #1 の応答に時間がかかりすぎる/ネットワーク接続が遅くなる間に、リクエスト (#2 など) が着信します。
  • この場合、#2 はサーバーから非常に迅速な応答を取得し、任意の時点で #1 が応答を返したとしても、観測可能な HTTP 応答は無視する必要があります。
  • 私が直面している問題は、最初にコンポーネントがリクエスト#2からの応答値を表示し、リクエスト#1が完了すると再び更新されることです(これは発生しないはずです)。

switchMap はオブザーバブルをキャンセルし、オブザーバブル値が発行される順序を維持すると考えました。

私のservice.tsからの抜粋

上記の実装は機能しません。このユースケースの正しい実装を誰かが理解できますか。