Semua panggilan DB akan kembali kepada Anda segera dengan Futures
, bahkan jika mereka belum selesai dengan operasi mereka. Ini asinkron bukan sinkron.
Anda dapat mengubah kode Anda untuk mengakomodasi Futures
dengan salah satu dari dua cara:
-
anda dapat menggunakan
Await.result
dengan semua panggilan DB, untuk menunggu pada saat itu hingga selesai, misalnya:Await.result(db.run(insertEffect), Duration.Inf)
-
Anda dapat menggunakan
.map
(atau.flatMap
jika Anda menggunakanFutures
lain dari dalam), dengan kode yang ingin Anda jalankan ketika operasi DB selesai. Misalnya:db.run(insertEffect).map(_ => ... do stuff... )
Lihat Stack Overflow lain utas mengenai pengecualian dengan beberapa ide tentang penyebabnya.