以下のコードは、Slick 3.1.xを使用してテーブルから行を読み込み、SQLエラーをキャッチしようとしています。 UserDB
はテーブルのSlick表現であり、User
が関連オブジェクトです。Slickの今後のエラーでSQLエラーをキャッチ
このコードは、次のエラーでfailure
文ではコンパイルされません:SQLエラーをキャッチするために、この問題を解決する方法
type mismatch; found : Unit required: scala.concurrent.Future[Option[user.manage.User]]
?
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'はコールバックを呼び出して' Unit'を返します。したがって、メソッド全体が 'Unit'を返します。 – rethab
ありがとうございます。失敗した場合、ログにエントリを書き込み、 'None'を返す必要があると仮定します(レコードが正しく読み込まれている場合は' Some'を返すのとは対照的に)。 – ps0604
'onFailure'を使わず、例外を処理して何かを返す' Future'のメソッドを使用しないでください。 – rethab