Javascript 角度rxjs去抖动,限制用户发送多个请求
基本上,我的问题是,当连接速度较慢时,用户能够多次按下“保存”按钮并保存多个数据。此问题不会在本地发生,但在登台时会发生 虽然我已经设置了这个。hasbeensubmitt=true;当请求完成并且根据条件在按钮上[禁用]时,用户仍然能够多次单击按钮,并且可以多次保存,这是错误的 有人说角度rxjs去Bounce可以解决这个问题,有人能给我一些启发吗?非常感谢。基于下面的代码,它将如何帮助我的问题。谢谢 密码 htmlJavascript 角度rxjs去抖动,限制用户发送多个请求,javascript,angular,typescript,rxjs,Javascript,Angular,Typescript,Rxjs,基本上,我的问题是,当连接速度较慢时,用户能够多次按下“保存”按钮并保存多个数据。此问题不会在本地发生,但在登台时会发生 虽然我已经设置了这个。hasbeensubmitt=true;当请求完成并且根据条件在按钮上[禁用]时,用户仍然能够多次单击按钮,并且可以多次保存,这是错误的 有人说角度rxjs去Bounce可以解决这个问题,有人能给我一些启发吗?非常感谢。基于下面的代码,它将如何帮助我的问题。谢谢 密码 html 拯救 如果我理解正确,您希望限制用户多次点击“保存”,并且您说您已经应用了
拯救
如果我理解正确,您希望限制用户多次点击“保存”,并且您说您已经应用了禁用条件
你能试着像下面那样重写你的保存按钮吗
save(): void {
this.hasBeenSubmitted = true;
const create = this.requestFormService.createRequestData(this.form, this.respondents)
.pipe(
take(1),
finalized(this.hasBeenSubmitted = false),
),
catchError((err) =>{
this.hasBeenSubmitted = false;
this.handleInvalidFields(error, 'Failed to save the Feedback Request as
draft. One or more fields contain invalid values. Input a valid value to proceed.');
this.messageDialogService.show('Failed to save the Feedback Request as
draft. One or more fields contain invalid values. Input a valid value to proceed.', true);
create.unsubscribe();
})
.subscribe(
(results: FeedbackRequest[]) => {
}
);
}
我更改的主要内容是执行this.hasbeensubmitt=true代码>在创建调用之前
我希望这会有所帮助。为什么不在执行异步方法之前设置disabled标志?这将防止额外的按钮点击,无论请求需要多长时间。您总是可以在成功或错误时重新启用。您的意思是在创建()之前?是的,这在禁用按钮方面很常见。它不依赖于从服务器获取响应的时间长度。它会立即被禁用。好的,当然可以,但在执行create()之前,更新方法save to set hasBeenSubmitted为true。我所要做的就是打开多个选项卡,然后就回到了原点。仅通过限制web客户端实例中的并发请求无法解决此问题。pipe、take、finalized是什么?pipe用于链接其他运算符,从rx6开始必须使用,一旦流完成,finalized将被调用现在,当您说代码不工作时,你能详细说明一下什么不起作用吗。我的意思是任何编译时错误或者按钮没有被禁用?
<button [disabled]="form.invalid || (!duplicateMode && !form.dirty) || (!editMode) || hasBeenSubmitted"
mat-raised-button *ngIf="form" (click)="save()" type="submit">
<ng-container>
<span>SAVE</span>
</ng-container>
</button>
save(): void {
this.hasBeenSubmitted = true;
const create = this.requestFormService.createRequestData(this.form, this.respondents)
.pipe(
take(1),
finalized(this.hasBeenSubmitted = false),
),
catchError((err) =>{
this.hasBeenSubmitted = false;
this.handleInvalidFields(error, 'Failed to save the Feedback Request as
draft. One or more fields contain invalid values. Input a valid value to proceed.');
this.messageDialogService.show('Failed to save the Feedback Request as
draft. One or more fields contain invalid values. Input a valid value to proceed.', true);
create.unsubscribe();
})
.subscribe(
(results: FeedbackRequest[]) => {
}
);
}