Angular 为什么我的AsyncValidator总是返回true?

Angular 为什么我的AsyncValidator总是返回true?,angular,customvalidator,Angular,Customvalidator,为什么这总是返回错误 导出类UserExistsValidatorService实现AsyncValidator{ 构造函数(私有用户服务:用户服务){} 验证(控件:FormControl):可观察{ 返回this.userService.existsUser(control.value) .pipe(映射(exists=>(exists===false)?空:{ userExists:{valid:false} }), catchError(()=>of(null)); } } 验证的这个

为什么这总是返回错误

导出类UserExistsValidatorService实现AsyncValidator{
构造函数(私有用户服务:用户服务){}
验证(控件:FormControl):可观察{
返回this.userService.existsUser(control.value)
.pipe(映射(exists=>(exists===false)?空:{
userExists:{valid:false}
}),
catchError(()=>of(null));
}
}
验证的这个实现调用一个服务方法,该方法返回一个
可观察的

existsUser(用户名:字符串):可观察{
返回此.http.post(`${environment.apirl}/existsUser`,{username})
.pipe(映射(response=>response.userExists==='1'))
.pipe(catchError(this.errorHandler));
}
我已通过订阅并记录服务以进行快速测试来验证该服务是否正常工作:

this.userService.existsUser(this.registerGrp.controls.username.value)
.subscribe(exists=>{console.log(exists);});
这是我所期望的真/假

但是,my FormGroup.invalid始终返回false。验证程序似乎总是启动

ngOnInit():void{
//鲍恩公式
this.registerGrp=this.formBuilder.group({
用户名:['',this.userExistsValidator],
密码:[''],
//确认Feld müsste Egentlich不符合要求
//确认密码:[''],
确认密码:[''],
Xbox名称:[''],
不协调名称:[''],
已接受:[错误]
});
}
console.log(this.registerGrp.invalid);//总是假的

有什么想法吗?

Angular不是展开你的可观察对象,它只是评估整个
可观察对象,它总是真实的

发生这种情况的原因是您没有告诉Angular这是一个异步验证器。最多可以接受3个参数:状态、同步验证程序列表、异步验证程序列表

在您的情况下,如果没有同步验证器,可以将
null
作为第二个参数传递:

username: ['', null, this.userExistsValidator],

这不管用。core.js:6210 ERROR-TypeError:this.asyncValidator不是FormControl的函数。_-runAsyncValidator(forms.js:4358)在FormControl.updateValueandValidation(forms.js:4311)在FormBuilder.control(forms.js:4920)在FormBuilder.control(forms.js:9481)在FormBuilder在FormBuilder的Array.forEach()中的forms.js:9520。在RegisterComponent.ngOnInit(register.component.ts:34)中的FormBuilder.group(forms.js:9434)中的forms.js:9515)中的reduceControl(forms.js:9515)中的RegisterComponent.ngOnInit(register.component.ts:34)中的forms.js:9515)好的,我们把它去掉:-)它的用户名:[''[Validators.required,Validators.email],[thi