Czy mogę wykonać walidację formularza asynchronicznego w Play Framework 2.x (Scala)?

Naprawdę staram się zrozumieć asynchroniczne moce Play, ale znajduję wiele konfliktów w odniesieniu do miejsc, w których asynchroniczne wywołanie pasuje i miejsc, w których struktura wydaje się spiskować przeciwko jej użyciu.

Przykład, który mam, dotyczy walidacji formularza. Odtwarzanie umożliwia zdefiniowanie ograniczeń ad-hoc - patrz dokumentacja:

val loginForm = Form(
  tuple(
    "email" -> email,
    "password" -> text
  ) verifying("Invalid user name or password", fields => fields match { 
      case (e, p) => User.authenticate(e,p).isDefined 
  })
)

Ładne i czyste. Jeśli jednak używam w pełni asynchronicznej warstwy dostępu do danych (np. ReactiveMongo), takie połączenie doUser.authenticate(...) zwróciFuture i dlatego jestem w ciemności co do tego, jak mogę wykorzystać moc zarówno wbudowanych funkcji wiązania formularzy, jak i narzędzi asynchronicznych.

Dobrze jest nagłośnić podejście asyncowe, ale denerwuję się, że niektóre części frameworka nie grają z nim tak dobrze. Jeśli walidacja musi być przeprowadzona synchronicznie, wydaje się, że pokonuje ona punkt podejścia asynchronicznego. Znalazłem podobny problem podczas używaniaAction skład - np. związane z bezpieczeństwemAction który zadzwoniłby do ReactiveMongo.

Czy ktoś może rzucić jakieś światło na to, gdzie moje zrozumienie jest krótkie?

questionAnswers(5)

yourAnswerToTheQuestion