0
我有一个自定义验证器,用于验证用户的电子邮件是否唯一。角度自定义异步验证器保持待定状态
我搜索过的计算器上和互联网相关的话题,但没有帮助当我给输入表单(发送请求)
,请求停留在未决状态和亘古不变的缓解。
我测试过postman后端,它按预期工作,问题出在客户端或角度端。
的验证功能如下:
emailUniqueValidator (control: AbstractControl): Promise<{[key: string]: any}> | Observable<{[key: string]: any}> {
return new Promise((resolve, reject) => {
this.userService.checkEmailUnique(control.value).subscribe((response: Response) => {
const body = response.json();
if (body.found === false) {
resolve(null); // email is unique
} else {
reject({emailUniqueValidator: true}); // email is not unique
}
});
});
}
当我改变表单控件的值,出现未决类,但它坚持天长地久,而不是得到解决。
我有电子邮件的形式控制如下:
'email': new FormControl('', [
Validators.required,
Validators.email
], this.emailUniqueValidator.bind(this)
),
我的用户服务如下:
checkEmailUnique (email: string): Observable<Response> {
return this.http.post('http://localhost:3000/user/email', {email}, { withCredentials: true });
}
为什么验证器没有及时解决和保持未决下去吗?
编辑:
下面的代码是从服务蛮好中获得价值,我已经通过登录响应到控制台检查它。
如果电子邮件不存在于数据库中,那么它已经得到解决了,但是如果电子邮件已经存在,它将引发错误并且状态保持悬而未决。
return new Promise((resolve, reject) => {
this.userService.checkEmailUnique(control.value).subscribe((response: Response) => {
console.log(response);
response.json().found ? reject({emailUniqueValidator: true}) : resolve(null);
}, (error: any) => reject({emailUniqueValidator: true}));
});
我试过你的代码,但状态仍然悬而未决,你能告诉为什么会发生这种情况? –
你应该使用do()运算符进行调试,看看是否有任何事情能够通过,这应该起作用,有些问题在其他地方。 – bryan60