Angular 确保最后一个http post到达后端最后一个

Angular 确保最后一个http post到达后端最后一个,angular,rxjs,observable,httpclient,Angular,Rxjs,Observable,Httpclient,我如何确保最后一个http post到达最后一个客户端 我的用例。我有一个简单的由我自己实现的芯片列表。它由芯片和末端的输入表示。当用户在输入中键入内容并按Enter键时,带有键入文本的芯片将添加到芯片列表中,用户还可以从列表中删除特定芯片。关于添加和删除,我正在更新后端的芯片列表。下面是负责此操作的代码 addNewChip(){ if(this.chipText){ this.chips.push(this.chipText); this.chipText=“”; this.updateCh

我如何确保最后一个http post到达最后一个客户端

我的用例。我有一个简单的由我自己实现的芯片列表。它由芯片和末端的输入表示。当用户在输入中键入内容并按Enter键时,带有键入文本的芯片将添加到芯片列表中,用户还可以从列表中删除特定芯片。关于添加和删除,我正在更新后端的芯片列表。下面是负责此操作的代码

addNewChip(){
if(this.chipText){
this.chips.push(this.chipText);
this.chipText=“”;
this.updateChipsOnBE();
}
}
removeChip(chipText){
this.chips=this.chips.filter(text=>text!==chipText);
this.updateChipsOnBE();
}
私有updateChipsOnBE():可观察{
返回this.chipAPI.update(this.BEAddress,this.chips);
}
现在我担心可能的竞争条件:be上的
this.chipAPI.update
操作可能尚未完成,而另一个
this.chipAPI.update
操作将以这样的方式触发,后者的操作将在前者之前完成。这意味着,用户将丢失他或她应用的最后一次更改


我觉得RxJS中应该有一种方法来防止它,但我既找不到也找不到解决方案。

您需要在
chipAPI
中使用
concatMap
操作符

比如:

send$=新主题();
构造函数(http:HttpClient){
这个。发送$管道(
//contact将等待内部流完成。
concatMap(([address,chips])=>this.http.post(address,chips.pipe)(
重试(5),//如果请求失败,
//catchError(()=>EMPTY),//也许我们可以忽略错误
)),
//takeUntil(this.destroy$),//您需要实现一个取消订阅触发器。
).subscribe();
}
更新(地址、芯片):{
这个.发送$.next([地址,芯片]);
}

您可以分享更新方法的代码吗?