Javascript RxJs Angular异步验证器取消缓冲并获取最新值
我有异步角度验证器来检查帐户组是否已经存在Javascript RxJs Angular异步验证器取消缓冲并获取最新值,javascript,angular,rxjs,Javascript,Angular,Rxjs,我有异步角度验证器来检查帐户组是否已经存在 public accountGroupAlreadyExistsValidator(orgId: number, parentId: number) { return (control: AbstractControl) => { return new Observable((obs: any) => { control .valueChanges .debounceTime(500) .fi
public accountGroupAlreadyExistsValidator(orgId: number, parentId: number) {
return (control: AbstractControl) => {
return new Observable((obs: any) => {
control
.valueChanges
.debounceTime(500)
.filter(value => value.length > 0)
.distinctUntilChanged()
.flatMap(accountGroupName => this.accountGroupService
.accountGroupExistsInOrganization(orgId, parentId, accountGroupName)
)
.subscribe(result => {
result === true ?
obs.next({ accountGroupAlreadyExists: true }) : obs.next(null);
obs.complete();
});
});
};
}
代码可以工作,但它发送n个AJAX请求。当用户停止键入时,如何修改代码以仅发送1个请求
当前场景:如果用户键入5个字符,将发出5个AJAX请求。您已经在使用
debounceTime()
操作符。您确定问题不在于从accountGroupAlreadyExistsValidator
调用返回函数的方式吗?是的,我检查了所有内容。现在我已经从rx操作符切换到只返回promise对象,它正在运行更新的代码`public accountGroupAlreadyExistsValidator(parentId:number,originalName:string){return(c:AbstractControl)=>{clearTimeout(this.validationTimeout);返回新的promise(resolve=>{this.validationTimeout=setTimeout(()=>{const accountGroupName=c.value;const exists=this.accountGroupService.accountGroupExistsInOrganization(parentId,accountGroupName,originalName);返回是否存在?解析({accountGroupAlreadyExists:true}):解析(null);},600);}); }; } `