Implementando o validador assíncrono abaixo:
checkUserNameTaken() {
return (control: AbstractControl) => {
return control
.valueChanges
.pipe(debounceTime(300))
.pipe(switchMap(userName =>
this._signupService.checkUserNameTaken(userName)
))
.pipe(map(isTaken => isTaken ? { usernametaken: true } : null))
.pipe(first());
}
}
O botão de submit nunca ativa pois o status do form sempre fica como pending
<button [disabled]="form.invalid || form.pending" class="btn btn-primary btn-block">Register</button>
A função do service retorna o observable
checkUserNameTaken(userName: string) {
return this._http.get(`${API_URL}/user/exists/${userName}`);
}
Não tem nenhum erro no console ou de compilação.