Настройка
У меня есть (довольно стандартная) форма, которая позволяет пользователю создать учетную запись, введя имя пользователя и пароль. Когда поле #username
теряет фокус, база данных запрашивает, доступно ли указанное имя пользователя.
Проблема
Все работает, как и ожидалось, но пользовательский интерфейс блокируется с момента запуска события onblur
#username
, пока база данных не вернет значение. Как проверить базу данных асинхронным и неблокирующим образом?
Вот мой код (большую часть этого кода я извлек из примеров проектов Opa):
Типы
@abstract type User.ref = string
type User.t =
{ username : string
; passwd : string
}
type User.map('a) = ordered_map(User.ref, 'a, String.order)
База данных
db /user : User.map(User.t)
Форма
<form>
<input id=#username type="text" onblur={_ -> username_available() } placeholder="username" />
<input id=#password type="password" placeholder="password" />
</form>
Действия
username_available() : void =
user = Dom.get_value(#username)
match (get_user(user)) with
| { none } -> Log.notice("username available:", "YES")
| { some = _ } -> Log.notice("username available:", "NO")
get_user(username : string) : option(User.t) =
match ?/user[username] with
| { none } -> Option.none
| { ~some } -> Option.some(some)
Спасибо за вашу помощь.