Tất cả các cuộc gọi DB sẽ trả lại cho bạn ngay lập tức với Futures
, ngay cả khi họ chưa hoàn thành các hoạt động của mình. Đây là không đồng bộ không đồng bộ.
Bạn có thể thay đổi mã của mình để phù hợp với Futures
bằng một trong hai cách:
-
bạn có thể sử dụng
Await.result
với tất cả các lệnh gọi DB, phải đợi tại thời điểm đó cho đến khi chúng hoàn tất, ví dụ:Await.result(db.run(insertEffect), Duration.Inf)
-
bạn có thể sử dụng
.map
(hoặc.flatMap
nếu bạn đang sử dụngFuture
khác từ bên trong), với mã mà bạn muốn chạy khi hoạt động DB hoàn tất. Ví dụ:db.run(insertEffect).map(_ => ... do stuff... )
Hãy xem Stack Overflow khác chuỗi liên quan đến ngoại lệ với một số ý tưởng về nguyên nhân.