我的FormGroup验证器引发“ Promise or Observable”错误。我研究了许多SO示例,这些示例解释了将Observable或Promise作为错误状态返回,但是没有一个示例解释为什么在Web Service调用块中返回null可以正常工作,但如果在验证器函数的末尾掉线了,则不能返回null至底部。
验证器运行正常。只是我想在开始时消除错误。
component.ts
ngOnInit() {
this.dnFormGroup = this.formBuilder.group({
displayName: ['', [Validators.required], this.validateDisplayName.bind(this)] //NOTE: 2nd option is required! See https://angular.io/api/forms/FormGroup#description
});
}
public validateDisplayName(control: AbstractControl) {
if(control.value.length >= 3 && control.value !== this.authService.displayName) {
this.displayName = control.value;
return this.authService.validateDisplayName(control.value).then(
(res) => {
if(res) {
//displayName already used
return { displayNameTaken: true };
} else {
//displayName can be used
return null;
}
},
(err) => {
return { displayNameTaken: true };
});
}
return null; //<<<<< ERROR "Expected validator to return Promise or Observable"
}
谢谢, 鲍勃
答案 0 :(得分:1)
对验证器了解不多,但是仅函数中第一个返回的类型很重要。
在if块中,您将返回一个Promise(返回null
或一个对象,但这并不重要),所以可以。
但是在块外,您只返回null
,它既不是Promise也不是对象。尝试使它成为一个返回null
(带有return Promise.resolve(null)
的Promise或一个返回null
(带有import { of } from 'rxjs';
和return of(null)
的Observable)。