Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript RxJs Angular异步验证器取消缓冲并获取最新值_Javascript_Angular_Rxjs - Fatal编程技术网

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);}); }; } `