Я вижу здесь ошибку:
email: new FormControl(null, [Validators.required, Validators.email, this.UsedEmails.bind(this)])
Вы предоставляете валидаторы синхронизации и валидатор асинхронности в одном массиве. Но асинхронные валидаторы должны использоваться в качестве третьего параметра в FormControl:
email: new FormControl(null, [Validators.required, Validators.email], this.UsedEmails.bind(this))
Я также рекомендую использовать наблюдаемые вместо обещания, а также использовать formBuilder. Например:
constructor(
private fb: FormBuilder,
) {}
ngOnInit() {
this.myForm = this.fb.group({
name: ['', Validators.required],
email: [
'',
[Validators.required, Validators.email],
this.validateEmailNotTaken.bind(this)
]
});
}
validateEmailNotTaken(control: AbstractControl): Observable {
// check if email exists
}
Memcached не поддерживает данные, зеркально отражающие в настоящее время, он только обеспечивает способность разделить Ваши записи через серверы кратных чисел, чтобы попытаться препятствовать один то, чтобы быть затопляемым. Это работает или хешированием Вашего ключа с адресом сервера, или при помощи последовательного алгоритма хеширования (libketama).
В целом, хотя, Memcached не должен быть просмотрен как персистентный уровень хранения, и почти во всех случаях, данные в кэше должны совпасть с в базе данных. Если Вы вносите изменение в данные сессии пользователя и хотите кэшироваться, это, для обновления его в Memcached, то обновляет его в базе данных сразу позже. Если Вы хотите быть действительно осторожными, Вы могли бы реализовать простую систему журналирования, чтобы удостовериться, что эти данные остаются последовательными в случае системного отказа.
Memcached определенно используется для кэширования сессий, хотя, говорит создатель так же в Статье в журнале Jinux. Это действительно только предназначено для оптимизации операций чтения, в конце дня, любые данные, о которых Вы заботитесь, должны храниться в базе данных.
В идеальной ситуации данные сессии являются только единственным значением, внутренним числовым представлением идентификатора пользователя. Это означает, что пользователь передал страницу входа в систему успешно с обеспечением правильного пароли.
Но что относительно других как, возьмите stackoverflow, например, динамические данные на странице в зависимости от пользователя: псевдоним пользователя, числа репутации, заработанные значки, permssion для отъезда комментария. Они часто - результат нескольких СОЕДИНЕНИЙ через несколько таблиц базы данных.
Если Вы не помещаете memcached используемый, эти запросы почти всегда считывают данные с диска, который является очень медленным, не очень масштабируемой операцией. Кэш в базе данных? Что Вы думаете, что процент совпадений полагал бы, что база данных делает вещи кроме руководящих данных сессии? Почему необходимо читать из диска, в то время как Вы можете из памяти?
Конечно, любые записи к информации о соответствующем пользователе должны делать недействительным соответствующую сессию в memcached.
http://www.codeplex.com/memcachedproviders имеет поставщика состояния сеанса для asp.net, который хранит значения в memcached. Это обеспечивает способность скопировать данные сессии в 'SQL Server. Поскольку yogman сказал, что данные сессии хранятся как одно значение. Если замещение happends, целая сессия для того пользователя проиграна, и пользователь будет направлен к экрану входа в систему. Memcached не выселяет данных перед истечением, если он не исчерпывает пространство для содержания новых данных.