Javascript 角度rxjs去抖动,限制用户发送多个请求

Javascript 角度rxjs去抖动,限制用户发送多个请求,javascript,angular,typescript,rxjs,Javascript,Angular,Typescript,Rxjs,基本上,我的问题是,当连接速度较慢时,用户能够多次按下“保存”按钮并保存多个数据。此问题不会在本地发生,但在登台时会发生 虽然我已经设置了这个。hasbeensubmitt=true;当请求完成并且根据条件在按钮上[禁用]时,用户仍然能够多次单击按钮,并且可以多次保存,这是错误的 有人说角度rxjs去Bounce可以解决这个问题,有人能给我一些启发吗?非常感谢。基于下面的代码,它将如何帮助我的问题。谢谢 密码 html 拯救 如果我理解正确,您希望限制用户多次点击“保存”,并且您说您已经应用了

基本上,我的问题是,当连接速度较慢时,用户能够多次按下“保存”按钮并保存多个数据。此问题不会在本地发生,但在登台时会发生

虽然我已经设置了这个。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[]) => {

        }
      );
  }