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.resultze 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.flatMapjeśli używasz innegoFuturesod 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.