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.resultcon 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.flatMapsi estás usando otroFuturedesde 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.