Todas las llamadas de base de datos volverán a usted inmediatamente con Futures
, incluso si no han terminado con sus operaciones. Esto es asíncrono, no síncrono.
Puede cambiar su código para acomodar los Futures
de una de dos maneras:
-
puedes usar
Await.result
con todas las llamadas DB, para esperar en ese punto hasta que se completen, por ejemplo:Await.result(db.run(insertEffect), Duration.Inf)
-
puedes usar
.map
(o.flatMap
si estás usando otroFuture
desde dentro), con el código que desea ejecutar cuando se complete la operación de la base de datos. Por ejemplo:db.run(insertEffect).map(_ => ... do stuff... )
Eche un vistazo a otro desbordamiento de pila hilo con respecto a la excepción con algunas ideas sobre la causa.