セットアップ
ユーザーがユーザー名とパスワードを入力してアカウントを作成できる(かなり標準的な)フォームがあります。#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)
ご協力いただきありがとうございます。