Scala 有没有更好的方法来过滤未来

Scala 有没有更好的方法来过滤未来,scala,playframework,Scala,Playframework,所以我想在play框架中编写简单的登录逻辑。密码检查是这样的 ... .filter(user => BCrypt.checkpw(req.password, user.password)) ... 没问题。但当密码不正确时,我会得到一个例外: Future.filter predicate is not satisfied 但是,我想抛出我自己的异常,所以我这样做: ... .map(user => if (!BCrypt.checkpw(req.passwo

所以我想在play框架中编写简单的登录逻辑。密码检查是这样的

...
.filter(user => BCrypt.checkpw(req.password, user.password))
...
没问题。但当密码不正确时,我会得到一个例外:

Future.filter predicate is not satisfied
但是,我想抛出我自己的异常,所以我这样做:

...
 .map(user =>
        if (!BCrypt.checkpw(req.password, user.password)) {
          throw WrongCredentials()}
        else user)
...
这是可行的,但我一直想知道是否有更干净的方法。

您可以(从官方文件)执行以下操作:

您可以(从官方文档)执行以下操作:


您可以使用Recover谢谢它起作用您可以使用Recover谢谢它起作用
val purchase: Future[Int] = rateQuote map {
  quote => connection.buy(amount, quote)
} recover {
  case QuoteChangedException() => 0
}