Angular 5: пользовательский асинхронный валидатор замораживает браузеры - PullRequest
0 голосов
/ 05 июня 2018

У меня есть пользовательский асинхронный валидатор , который замораживает мое приложение.Протестировано в Chrome и Firefox .

Это происходит после ввода прибл.30 символов, что означает, что Validator был , называемый ок.30 раз .

Похоже, валидатор не разрушается и удерживает память .

# my.component.ts
// ...
this.form = this.formBuilder.group({
    email: ['', [Validators.required, Validators.email], EmailTakenValidator(myApiService)], 
});


# email-taken.validator.ts
import { ValidatorFn, AbstractControl, Validator } from '@angular/forms';
import { RegistrationService } from '../services/myApiService';
import { Observable } from 'rxjs/Observable';

export function EmailTakenValidator(myApiService:MyApiService) {    
    return control => new Promise((resolve, reject) => {               
        if (!control.value || !RegExp(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/).test(control.value)) {
            // invalid email -> skip
            return resolve({ EmailTakenValidator: {value: control.value} })
        }  

        myApiService.emailTaken(control.value).subscribe(isTaken => {
            if (isTaken) {
                return resolve({ EmailTakenValidator: {value: control.value} })
            } else {
                return resolve(null);
            }
        }, () => {
            return resolve({ EmailTakenValidator: {value: control.value} })
        })       
    })
}

Я проверил код без myApiServiceВсе та же проблема.

Есть идеи?Заранее спасибо!

Редактировать: Кажется, это память.Я просто спровоцировал ошибку и некоторое время игнорировал замороженный браузер.Используемая память увеличилась с 210 до 470 мб!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...