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.result
con tutte le chiamate DB, attendere a quel punto fino al completamento, ad esempio:Await.result(db.run(insertEffect), Duration.Inf)
-
puoi usare
.map
(o.flatMap
se stai usando un altroFuture
dall'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.