js-validator-livr icon indicating copy to clipboard operation
js-validator-livr copied to clipboard

Async interface for validation rules

Open EviGL opened this issue 8 years ago • 9 comments

Не увидел в документации ничего про асинхронные правила. Без этого может быть тяжко на клиенте: например, валидация города / улицы, надо скачивать список с сервака, а интерфейс валидатора синхронный.

EviGL avatar Mar 03 '16 06:03 EviGL

Другой пример: мне надо проверку, что введённый url публично доступен.

EviGL avatar Mar 03 '16 09:03 EviGL

Да, сейчас не поддерживается асинхронные правила. Есть в планах добавить. Думаю, что API будет вроде этого https://github.com/koorchik/js-validator-livr/blob/async-rules/t/06-async_custom_rules.js

koorchik avatar Jun 27 '16 19:06 koorchik

Но с этим подходом есть проблема, не ясно, как остановить выполнение валидации на первом ошибочном правиле. Например, когда у нас запросы к базе данных, и если у нас есть хоть одна ошибка - нет смысла грузить базу дополнительными запросами. В синхронном коде (PHP, Perl) реализации это решается просто - выбрасывается исключение.

koorchik avatar Jun 28 '16 04:06 koorchik

Подскажите, пожалуйста, как обстоят дела с этим issue? Рассматриваю возможность применения LIVR в проекте, но уже заранее знаю, что асинхронные валидации будут нужны.

Кстати, если вы все ещё в стадии исследования - вот тут приводится пример cancellation в библиотеке bluebird: https://stackoverflow.com/a/35380826/2799055

AZaviruha avatar Nov 28 '17 14:11 AZaviruha

Пока это еще открытый вопрос. Сложность в том, что это нужно добавить в ядро движка и нельзя реализовать просто правилами. Подскажите для какой задачи она планируются применяться, возможно будут идеи как это сделать в рамках текущей реализации.

koorchik avatar Nov 28 '17 17:11 koorchik

В своём боевом проекте применил такой workaround: "долгие" правила отсутствуют на клиенте. Если в наборе правил для формы присутствует одно из таких правил, то все правила и все значения формы отправляются ajax'ом на сервер, где они проходят уже через PHP-шный LIVR, результат отображается на клиенте.

Хотя это, конечно, далеко не идеальное решение. На изменение значения инпута такую валидацию не повешаешь.

EviGL avatar Nov 28 '17 17:11 EviGL

Пример асинхронной проверки, которая возникае достаточно регулярно: проверка доступности (не-занятости) e-mail на форме регистрации нового пользователя.

AZaviruha avatar Dec 12 '17 11:12 AZaviruha

はい、いい考え

sarkiroka avatar Jun 14 '21 07:06 sarkiroka

@koorchik Вітаю! АП темі) Віктор, підкажіть чи планується реалізація? Не хочеться на формі ускладнювати логіку, а обійтися лише livr

evgeniya-ch avatar Oct 19 '22 15:10 evgeniya-ch

Накидував API, але в результаті не виходить його зробити сумісним. Скоріше буде окремий виклик для асинхронної валідації й підготовки правил, або навіть окремий класс. Також поки не знаю чи буде паралельно виконуватися валідація для різних полів. Подумаю ще над цим найближчим часом й спробую реалізувати

koorchik avatar Oct 20 '22 16:10 koorchik

Вся робота по async валідації в гілці async-validation. Багато нюансів. Думаю, що на вихідних допишу. Але API валідатора нажаль буде несумісним з синхронними правилами. Можливо залишу обидві реалізації, бо не всі зможуть легко змігрувати код на асинхронні виклики

koorchik avatar Nov 17 '22 22:11 koorchik

Done! Just published v2.5 to NPM

koorchik avatar Nov 19 '22 21:11 koorchik

Дяка за допомогу, будемо пробувати!!!

evgeniya-ch avatar Nov 24 '22 18:11 evgeniya-ch