我有一个自定义异步验证器,冻结我的应用。在 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!