Итак, у меня есть этот валидатор:
takenUsername(control: FormControl): Promise<any> | Observable<any> {
const promise = new Promise<any>((resolve, reject) => {
let text$ = fromEvent(this.userName.nativeElement, "keyup")
.pipe(
debounceTime(200),
distinctUntilChanged(),
switchMap(() => this.employeeService.getEmployeeList())
)
.subscribe((employees) => {
if (employees.length === 0) {
resolve(null);
}
const properties = employees.map((employee) => employee.userName);
for (let tempProperty of properties) {
if (tempProperty === control.value) {
resolve({ usernameIsTaken: true });
} else {
resolve(null);
}
}
});
});
return promise;
}
По какой-то причине он проверяет только первый элемент, который у меня есть в коллекции. Я знаю, что logi c в других местах работает, потому что, если я удалю все объекты и добавлю некоторые снова, только первый из них будет сопоставлен как взятый. на других нет.
Я попытался вставить файл console.log:
const properties = employees.map((employee) => employee.userName);
for (let tempProperty of properties) {
console.log("temp property is " + tempProperty)
console.log("control value is " + control.value)
if (tempProperty === control.value) {
resolve({ usernameIsTaken: true });
} else {
resolve(null);
}
Результат:
контрольное значение ciao
свойство temp - l
значение элемента управления - ciao
свойство temp - ciao
значение элемента управления - ciao
свойство temp - dasd
контрольное значение - ciao
Итак, «ciao» не является первым элементом в таблице, поэтому я не получаю никаких ошибок. Если я попробовал с первым, этот logi c, похоже, работает и устраняет ошибку usernameIsTaken