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.resultmed 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.flatMapom du använder en annanFutureinifrå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.