首页 > 解决方案 > 有没有更好的方法来过滤未来

问题描述

所以我想在 play-framework 中编写简单的登录逻辑。密码检查看起来像这样

...
.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)
...

哪个有效,但我一直想知道是否有更清洁的方法。

标签: scalaplayframework

解决方案


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

val purchase: Future[Int] = rateQuote map {
  quote => connection.buy(amount, quote)
} recover {
  case QuoteChangedException() => 0
}

推荐阅读