используйте параметр updateOn
в вашем элементе управления формой, что-то вроде:
username: [null, {
validators: Validators.required,
asyncValidators: this.existingUsername.bind(this),
updateOn: 'blur'}],
, что говорит angular запускать проверку только при размытии, а не при изменении значения.
Однако, Я считаю, что это решение является неоптимальным в этом случае, так как пользователи ожидают, что вещи будут проверяться по мере их ввода. Я считаю, что лучший способ - воспользоваться преимуществом способа, которым angular автоматически отменяет предыдущие запросы и включает каждое новое значение, используя «таймер» для аннулирования вашей проверки, в вашей функции валидатора вы просто оберните свою наблюдаемую что-то вроде:
return timer(300).pipe(switchMap(() => /* actual validator */ ))
Это обеспечит выполнение запроса проверки только в том случае, если пользователь не изменил значение в течение 300 мс, поскольку предыдущая проверка будет отменена, если пользователь изменит значение.