目標: ユーザーがスライダーを動かすと、スライダーの値がサーバーに送信されて値 X が計算され、スライダーの横に表示され、スライダーの値が変化すると徐々に更新されます。
私がしたこと: スロットルされた件名を使用switchMap
して、値をフェッチしました:
sliderMoved$.pipe(
throttleTime(200),
switchMap(sliderVal => server.calculateX(sliderVal)
)
それは仕事をしますが、
問題: サーバーがスロットル時間より長く応答する場合、switchMap オペレーターは前の呼び出しをキャンセルします。したがって、スライダーの動きが遅いと一連のリクエストがキャンセルされ、値はユーザーがスライドを停止したときにのみ更新されます。
改善が必要:サーバー呼び出しごとに、応答が来るまで待機し、表示された値 X を更新してから、スライダーの最新の値で新しい呼び出しを開始する必要があります。保留中のリクエストがあったときにユーザーがスライドを停止した場合、最新のスライダー値を持つ最後の 1 つのリクエストを行う必要があります。
(または、それがどのように機能するかについてより良い考えがある場合)