Angular 5:自定义异步验证器冻结浏览器

时间:2018-06-05 12:11:52

标签: javascript angular validation angular-promise angular-validation

我有一个自定义异步验证器冻结我的应用。在 Chrome和Firefox 中进行了测试。

输入约。 30个字符,表示Validator 称为约。 30次

看起来Validator不会被破坏并保留内存

# 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 mb增加到470 mb!

0 个答案:

没有答案