Tous les appels DB vous reviendront immédiatement avec Futures , même s'ils n'ont pas terminé leurs opérations. Ceci est asynchrone et non synchrone.
Vous pouvez modifier votre code pour tenir compte des Futures de l'une des deux manières :
-
vous pouvez utiliser
Await.resultavec tous les appels de base de données, pour attendre à ce stade jusqu'à ce qu'ils se terminent, par exemple :Await.result(db.run(insertEffect), Duration.Inf) -
vous pouvez utiliser
.map(ou.flatMapsi vous utilisez un autreFuturede l'intérieur), avec le code que vous souhaitez exécuter lorsque l'opération de base de données est terminée. Par exemple :db.run(insertEffect).map(_ => ... do stuff... )
Jetez un œil à un autre débordement de pile fil concernant l'exception avec quelques idées quant à la cause.