Skip to content

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
msgMessageСвоё сообщение об ошибке. Строка с {параметрами} или функция

Коды ошибок ​

КодКогдаСообщение по умолчанию
invalidfn вернула falseInvalid 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);

См. также ​