Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 在上一次调用在中完成时发送最新的http请求_Angular_Http_Throttling_Buffering - Fatal编程技术网

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

Angular 在上一次调用在中完成时发送最新的http请求,angular,http,throttling,buffering,Angular,Http,Throttling,Buffering,我正在努力实现以下目标: 我有一张申请表,上面有4个字段(a、B、C、D)用于更新票证。每当用户退出某个字段(在键入某个内容后),都应该向服务器发送一个更新该票证的请求。但是,想象一下以下场景: 用户更新字段A 将向服务器发送更新票证的请求 在A的更新调用完成之前,用户先更新B,然后更新C 在这种情况下,我只希望将最新的调用(字段C的更新)发送到服务器,而不是在A的回复完成之前。我试图在下面说明这一点 我读过好几篇关于去抖动和节流的文章,但我似乎无法对完美的解决方案进行思考,因为这首先不是

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

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

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

我读过好几篇关于去抖动和节流的文章,但我似乎无法对完美的解决方案进行思考,因为这首先不是基于时间,其次不应该忽略当前正在进行的事件,而当前的事件似乎将两者都排除在外

我曾想过实现一种只为一个项目留出空间的缓冲区,但我认为必须有更好的解决方案


非常感谢您的任何意见,谢谢

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

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

requestObservable$
将使用最新数据进行响应。

这不起作用。我总是需要当前正在进行的呼叫首先完成(在我的示例中是“A”呼叫)。好的。让它正确。您需要
A
来完成,但不需要
B
,因为
B
将被
C
覆盖。因此,最终您希望得到
A
C
的响应,确切地说,在A完成之前,C不应该启动。用户事件是否在相同的可观察状态下发出?是的,它们当然可以。