ユーザーの電子メールが一意であるかどうかを検証するカスタム検証ツールがあります。角度カスタム非同期検証ツールは保留状態のままです
私はstackoverflowの、インターネット上の関連するトピックを検索しましたが、何の助け
私は(要求を送信する)形式で入力を与えていないんだとき、要求が保留状態のままと解決さをdoesnot。
私は郵便配達員でバックエンドをテストしましたが、それは期待どおりに動作していますが、問題はクライアント側かアンギュラ側かです。
次のように検証機能は次のとおりです。私は、フォームコントロールの値を変更していた場合
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 });
}
なぜバリデータは、時間内に解決し、永遠に保留中滞在していませんか?
EDIT:次のコードは、サービスからの値がうまくなっている
、私はコンソールに応答をログインすることで、それをチェックしました。
電子メールがデータベースに存在しない場合は解決済みですが、電子メールがすでに存在する場合はエラーが発生しており、状態は保留状態のままです。
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