Alla DB-samtal kommer tillbaka till dig omedelbart med Futures
även om de inte är klara med sin verksamhet. Detta är asynkront inte synkront.
Du kan ändra din kod så att den passar Futures
på ett av två sätt:
-
du kan använda
Await.result
med alla DB-anrop, att vänta vid den tidpunkten tills de slutförs, till exempel:Await.result(db.run(insertEffect), Duration.Inf)
-
du kan använda
.map
(eller.flatMap
om du använder en annanFuture
inifrån), med kod som du vill köra när DB-operationen är klar. Till exempel:db.run(insertEffect).map(_ => ... do stuff... )
Ta en titt på en annan Stack Overflow tråd angående undantaget med några idéer om orsaken.