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