Wszystkie wywołania DB wrócą do Ciebie natychmiast z Futures
, nawet jeśli nie zakończyli jeszcze swoich operacji. To jest asynchroniczne, a nie synchroniczne.
Możesz zmienić swój kod, aby dostosować się do Futures
na jeden z dwóch sposobów:
-
możesz użyć
Await.result
ze wszystkimi wywołaniami bazy danych, aby czekać w tym momencie, aż się skończą, na przykład:Await.result(db.run(insertEffect), Duration.Inf)
-
możesz użyć
.map
(lub.flatMap
jeśli używasz innegoFutures
od wewnątrz) z kodem, który chcesz uruchomić po zakończeniu operacji bazy danych. Na przykład:db.run(insertEffect).map(_ => ... do stuff... )
Spójrz na inny Stack Overflow wątek odnośnie wyjątku z pewnymi pomysłami co do przyczyny.