问题描述
我正在努力实现以下目标:
我有一个包含 4 个字段(A、B、C、D)的请求表,用于更新工单。每当用户退出字段时(在键入内容后),应向服务器发送请求以更新该票证。但是,请想象以下场景:
- 用户更新字段 A
- 向服务器发送请求以更新票证。
- 用户在 A 的更新调用完成之前先更新 B,然后更新 C
在这种情况下,我只希望将 最新 调用(字段 C 的更新)发送到服务器,而不是在 A 的回复完成之前。我试图在下面说明这一点。
我已经阅读了几个关于去抖动和节流的地方,但我似乎无法理解完美的解决方案,因为这首先不是基于时间,其次它不应该忽略当前正在进行的事件,这似乎是排除两者。
我想过实现一种缓冲区,只为一件物品留出空间,但我认为必须有更好的解决方案。
非常感谢任何输入,谢谢!
解决方法
看起来您需要 rxjs switchmap
运算符。每次您的输入 observable 发出新数据时,Switchmap
都会用新的请求 observable 替换当前请求 observable。发生这种情况时,第一个请求将被取消。
const requestObservable$ = inputObservable$.pipe(
switchmap(yourInputData => this.http.post("...url",yourInputData))
);
requestObservable$.subscribe(response => console.log(response));
requestObservable$
将响应最新数据。