Tutte le chiamate DB ti verranno restituite immediatamente con Futures , anche se non hanno terminato le loro operazioni. Questo è asincrono non sincrono.
Puoi modificare il codice per adattarlo ai Futures in due modi:
-
puoi usare
Await.resultcon tutte le chiamate DB, attendere a quel punto fino al completamento, ad esempio:Await.result(db.run(insertEffect), Duration.Inf) -
puoi usare
.map(o.flatMapse stai usando un altroFuturedall'interno), con il codice che si desidera eseguire al termine dell'operazione DB. Ad esempio:db.run(insertEffect).map(_ => ... do stuff... )
Dai un'occhiata a un altro Stack Overflow filo per quanto riguarda l'eccezione con alcune idee sulla causa.