Я использую собственный асинхронный валидатор с Angular 4 реактивными формами, чтобы проверить, был ли уже отправлен адрес электронной почты, вызвав бэкэнд.
Однако Angular вызывает валидатор, который делает запрос на сервер для каждого введенного символа. Это создает ненужный стресс на сервере.
Можно ли элегантно отказаться от асинхронных вызовов с помощью RxJS наблюдаемого?
import {Observable} from 'rxjs/Observable';
import {AbstractControl, ValidationErrors} from '@angular/forms';
import {Injectable} from '@angular/core';
import {UsersRepository} from '../repositories/users.repository';
@Injectable()
export class DuplicateEmailValidator {
constructor (private usersRepository: UsersRepository) {
}
validate (control: AbstractControl): Observable<ValidationErrors> {
const email = control.value;
return this.usersRepository
.emailExists(email)
.map(result => (result ? { duplicateEmail: true } : null))
;
}
}