javascript - Angular rxjs 去抖动
问题描述
基本上我的问题是,当连接速度很慢时,用户能够多次按下保存按钮并且正在保存多个数据。此问题不会在本地发生,但在暂存时会发生。
虽然我已经设置了 this.hasBeenSubmitted = true; 当请求完成并根据条件在按钮上[禁用]时,用户仍然能够多次单击按钮并且可以保存多次,这是错误的。
有人说 Angular rxjs debounce 可以解决这个问题,有人能告诉我这个吗?谢谢你。根据下面的代码,它将如何帮助我解决问题。谢谢。
代码
save(): void {
const create = this.requestFormService.createRequestData(this.form, this.respondents)
.subscribe(
(results: FeedbackRequest[]) => {
this.hasBeenSubmitted = true;
},
(error) => {
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();
}
);
}
html
<button [disabled]="hasBeenSubmitted"
mat-raised-button *ngIf="form" (click)="save()" type="submit">
<ng-container>
<span>SAVE</span>
</ng-container>
</button>
解决方案
此时您在请求完成后设置 hasBeenSubmitted。但由于请求可能需要一些时间,因此用户可以在此期间再次按下按钮。您可以在保存数据之前设置标志:
save(): void {
this.hasBeenSubmitted = true;
const create = this.requestFormService.createRequestData(this.form, this.respondents)
.subscribe(
res => {},
(error) => {
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();
}
);
}
推荐阅读
- node.js - chrome打开wss协议时如何解决ERR_DISALLOWED_URL_SCHEME?
- tensorflow - 如何计算 eval_metric_ops 中的中位数?
- ios - 按钮粒子效果 Swift
- gitlab - 在 gitlab 服务器中运行 .gitlab-ci.yml 文件的进程的名称是什么?
- vba - PowerShell 将 Excel 加载项拆分为单独的工作簿
- python - 子进程终止时如何运行函数?
- reactjs - 在阿波罗查询后发送道具
- python - for循环中的熊猫get_dummies
- elixir - Elixir, Absinthe 如何在与苦艾酒约会后创建用户?
- java - NamedParameterJdbcTemplate 不支持 SUM()?