Angular 上一次调用完成时发送最新的 http 请求

问题描述

我正在努力实现以下目标:

我有一个包含 4 个字段(A、B、C、D)的请求表,用于更新工单。每当用户退出字段时(在键入内容后),应向服务器发送请求以更新该票证。但是,请想象以下场景:

  • 用户更新字段 A
  • 向服务器发送请求以更新票证。
  • 用户在 A 的更新调用完成之前先更新 B,然后更新 C

在这种情况下,我只希望将 最新 调用(字段 C 的更新)发送到服务器,而不是在 A 的回复完成之前。我试图在下面说明这一点。

enter image description here

我已经阅读了几个关于去抖动和节流的地方,但我似乎无法理解完美的解决方案,因为这首先不是基于时间,其次它不应该忽略当前正在进行的事件,这似乎是排除两者。

我想过实现一种缓冲区,只为一件物品留出空间,但我认为必须有更好的解决方案。

非常感谢任何输入,谢谢!

解决方法

看起来您需要 rxjs switchmap 运算符。每次您的输入 observable 发出新数据时,Switchmap 都会用新的请求 observable 替换当前请求 observable。发生这种情况时,第一个请求将被取消。

const requestObservable$ = inputObservable$.pipe(
  switchmap(yourInputData => this.http.post("...url",yourInputData))
);
requestObservable$.subscribe(response => console.log(response));

requestObservable$ 将响应最新数据。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...