Mysql
 sql >> Database >  >> RDS >> Mysql

Le query Slick 3.0 (scala) non restituiscono dati finché non vengono eseguite più volte (credo)

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:

  1. 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)

  2. puoi usare .map (o .flatMap se stai usando un altro Future 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.