Angular 5 FormGroup验证程序预期验证程序返回Promise或Observable

时间:2019-02-23 23:01:01

标签: angular

我的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"
}

谢谢, 鲍勃

1 个答案:

答案 0 :(得分:1)

对验证器了解不多,但是仅函数中第一个返回的类型很重要。

在if块中,您将返回一个Promise(返回null或一个对象,但这并不重要),所以可以。

但是在块外,您只返回null,它既不是Promise也不是对象。尝试使它成为一个返回null(带有return Promise.resolve(null)的Promise或一个返回null(带有import { of } from 'rxjs';return of(null)的Observable)。