Angular 确保最后一个http post到达后端最后一个
我如何确保最后一个http post到达最后一个客户端 我的用例。我有一个简单的由我自己实现的芯片列表。它由芯片和末端的输入表示。当用户在输入中键入内容并按Enter键时,带有键入文本的芯片将添加到芯片列表中,用户还可以从列表中删除特定芯片。关于添加和删除,我正在更新后端的芯片列表。下面是负责此操作的代码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
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([地址,芯片]);
}
您可以分享更新方法的代码吗?