checkAsync
Своя асинхронная проверка: запрос в базу, внешний API. Работает только с validateAsync и parseAsync.
Сигнатура
ts
function checkAsync<T>(fn: (value: T, info: Info) => Promise<boolean> | boolean, msg?: Message): Action<T>Параметры
| Параметр | Тип | Описание |
|---|---|---|
fn | (value: T, info: Info) => Promise<boolean> | boolean | Проверка. info — как у check |
msg | Message | Своё сообщение об ошибке. Строка с {параметрами} или функция |
Коды ошибок
| Код | Когда | Сообщение по умолчанию |
|---|---|---|
invalid | fn вернула false | Invalid value |
Тексты можно поменять: см. Сообщения и локализация.
Особенности
- Запускается после всех синхронных правил поля и только если они прошли — в базу не уйдёт запрос с невалидным email.
- Асинхронные проверки разных полей выполняются параллельно.
validateиparseс такой схемой бросят ошибку — нужна асинхронная версия.- Результат не меняет значение:
checkAsyncтолько проверяет.
Пример
Уникальный email
ts
const Signup = object({
email: pipe(
string(),
trim(),
toLowerCase(),
email(),
checkAsync(async (v) => !(await db.users.exists({ email: v })), 'Email уже зарегистрирован'),
),
});
const result = await validateAsync(Signup, req.body);См. также
- validateAsync
- parseAsync
- check — синхронная версия