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.resultverwenden 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
.mapverwenden (oder.flatMapwenn Sie ein anderesFutureverwenden 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.