在自定义验证器中等待HTTP请求

时间:2019-09-08 00:12:26

标签: angular http

我为模板驱动的表单创建了一个自定义验证器,以检查用户名是否已存在于数据库中,但是由于http请求是异步的,所以我的函数始终返回null;

有没有一种方法可以等待getUser()函数结束并将isValid字段设置为false,然后再返回它?

function validateUSERNAMEFactory(userService: UserService) : ValidatorFn {
    return (c: AbstractControl) => {

        var user:User[];
        var isValid = true;

        userService.getUsers().subscribe((data: User[])=>{
            user = data;
            for(let u of user){
                if(u.korIme===c.value) isValid = false;
            }
          });

        if(isValid) {
            return null;
        } else {
            return {
                korIme: {
                    valid: false
                }
            };
      }
    }
}

服务类代码:

  getUsers(){
    return this.http.get(`${this.url}/home`);
  }

我的指令类:

  export class USERNAMEValidator implements Validator { 
    validator: ValidatorFn;

    constructor(private userService: UserService) {
        this.validator = validateUSERNAMEFactory(this.userService);
      }

    validate(c: FormControl) {
        return this.validator(c);
    }

   }

0 个答案:

没有答案