Я добавил debounce в свой асинхронный валидатор, на SO и Github есть решения, подобные этому (https://github.com/angular/angular/issues/13200).
У меня проблема в том, что если форма уже имеет значение при создании, все решения, которые я нашел, не работают.
если поле пусто, это работает:
return control
.valueChanges
.debounceTime(400)
.take(1)
.distinctUntilChanged()
.switchMap(value => this.systemService.getInstances({ name: value }))
.map((data) => {
if (CHECKISTRUE)) {
return { nameAlreadyExists: true };
} else {
return null;
}
});
если есть начальное значение, control.valueChange не определено. Моя попытка исправить эту проблему:
if (!control.valueChanges) {
return Observable.of(null);
}
к сожалению, статус остается на рассмотрении.
все результаты Google приводят к решению для пустых полей, которое не помогает.
без статуса остается на рассмотрении навсегда: github.com/angular/angular/issues/13200#issuecomment-3304048 20
У меня та же проблема, элемент управления угловой формы с начальным значением и асинхронный валидатор. элемент управления всегда находится в состоянии ОЖИДАНИЕ. Вы нашли здесь какое-нибудь решение?
Я забыл о проблеме и о том, в каком проекте она у меня была. но позволь мне завтра проверить свои проекты, может быть, я найду его. Я предполагаю, что проблема была в совершенно другой части кода ...





Почему вы используете
take(1)? Это автоматически закроет наблюдаемое после первого выброса.