目标:用户移动滑块,滑块值被发送到服务器计算某个值 X,显示在滑块旁边并随着滑块值的变化逐渐更新。
我做了什么:使用节流主题,switchMap
'ped 来获取值:
sliderMoved$.pipe(
throttleTime(200),
switchMap(sliderVal => server.calculateX(sliderVal)
)
它完成了这项工作,但是
问题:如果服务器响应时间长于限制时间,switchMap 操作员会取消 previos 调用。因此,滑块的缓慢移动会导致取消请求的顺序,并且只有在用户停止滑动时才会更新值。
需要改进:对于每个服务器调用,我需要等到响应到来,更新显示的值 X,然后使用滑块的最新值触发新调用。如果用户在有未决请求时停止滑动,则必须发出具有最新滑块值的最后一个请求。
(或者如果你对它应该如何工作有更好的了解)