我为模板驱动的表单创建了一个自定义验证器,以检查用户名是否已存在于数据库中,但是由于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);
}
}