下面的代碼使用Slick 3.1.x從表中讀取一行,試圖捕獲任何SQL錯誤。 UserDB
是表的Slick表示,而User
是相關對象。在Slick將來發生故障時捕獲SQL錯誤
此代碼不會在failure
語句以下錯誤編譯:
type mismatch; found : Unit required: scala.concurrent.Future[Option[user.manage.User]]
如何解決這個問題,以趕上SQL錯誤?
def read (sk: Int): Future[Option[User]] = {
val users = TableQuery[UserDB]
val action = users.filter(_.sk === sk).result
val future = db.run(action)
future.onSuccess {
case result =>
if (!result.isEmpty)
Some(result(0))
else
None
}
future.onFailure { // <-- compilation error
case e => println (e.getMessage)
None
}
}
'onFailure' reigsters回調並返回'Unit'。因此你的整個方法返回'Unit'。 – rethab
謝謝。假設在失敗時我需要在日誌中寫入一個條目並返回'None'(而不是在正確讀取記錄時返回'Some'),那麼該怎麼辦呢? – ps0604
不要使用'onFailure',而是使用'Future'上的方法來處理異常,並返回一些東西。 – rethab