当前位置:  开发笔记 > 编程语言 > 正文

如何最好地处理Future.filter谓词是不满意的类型错误

如何解决《如何最好地处理Future.filter谓词是不满意的类型错误》经验,为你挑选了1个好方法。

我喜欢scala的类型安全,但我一直遇到的一个运行时错误是

 Future.filter predicate is not satisfied

我可以看到为什么我收到这个错误,只是寻找关于如何最好地解决这个错误的建议并优雅地处理它或者我做错了?

val r: Future[play.api.mvc.Result] = for {
  account <- accountServer.get(...)
  if account.isConfirmed
  orders <- orderService.get(account, ...)
} yield {
  ...
}

如果帐户未确认,我将收到上述错误.

我原以为,由于过滤器有可能失败,因此该scala会使yield返回值成为Option.没有?



1> Alvaro Carra..:

filter没有意义,Future因为类型系统不知道该else案件要返回什么,所以依靠它是不安全的(通过使用if-guard).但你可以在for-comprehension中做到这一点来实现同样的目的:

val r: Future[play.api.mvc.Result] = for {
  account <- accountServer.get(...)
  orders <- if (account.isConfirmed) orderService.get(account, ...) 
            else Future.successful(Seq.empty) 
} yield {
  ...
}

(作为Jean Logeart的答案,但在理解中)

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有