Alle DB-Aufrufe werden sofort zu Ihnen zurückgeschickt mit Futures
, auch wenn sie mit ihren Operationen noch nicht fertig sind. Dies ist asynchron, nicht synchron.
Sie können Ihren Code ändern, um ihn an die Futures
anzupassen auf eine von zwei Arten:
-
Sie können
Await.result
verwenden bei allen DB-Aufrufen, um an diesem Punkt zu warten, bis sie abgeschlossen sind, zum Beispiel:Await.result(db.run(insertEffect), Duration.Inf)
-
Sie können
.map
verwenden (oder.flatMap
wenn Sie ein anderesFuture
verwenden von innen) mit Code, den Sie ausführen möchten, wenn der DB-Vorgang abgeschlossen ist. Zum Beispiel:db.run(insertEffect).map(_ => ... do stuff... )
Schauen Sie sich einen weiteren Stack Overflow an Faden bezüglich der Ausnahme mit einigen Ideen zur Ursache.