2017-10-17 5 views
0

ユーザーの電子メールが一意であるかどうかを検証するカスタム検証ツールがあります。角度カスタム非同期検証ツールは保留状態のままです

私は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})); 
}); 

答えて

0

なぜあなたは目に見える頭痛のラップを約束していますか?これを試してみてください:

emailUniqueValidator (control: AbstractControl): Observable<{[key: string]: any}> { 
    return this.userService.checkEmailUnique(control.value) 
       .map(r => r.json()) 
       .map(r => (r.found) ? {emailUniqueValidator: true} : null); 
} 
+0

私はあなたのコードを試しましたが、状態はまだ保留中です、なぜこれが起こっているのですか? –

+0

do()演算子を使用してデバッグする必要があります。 – bryan60

関連する問題