【问题标题】:For-Comprehension Future with exceptionsFor-Comprehension Future 有例外
【发布时间】:2014-11-04 03:54:56
【问题描述】:

我有两个 Future,我想恢复其中一个的异常:

def getId(): Future[Either[Exception, Id]] = ...
def result(): Future[Result] = ...

我尝试过这样的事情:

for {
  id <- getId()
  r <- result(id, param, param)
} yield {
  r
} recover {
  case e => println(e.getMessage)
}

有人可以帮助我吗?

非常感谢。

【问题讨论】:

  • Futures 已经封装了异常。为什么使用Either

标签: scala


【解决方案1】:

您应该在正在处理的 val 处而不是在 for 处恢复。如果抛出异常,下面的代码将 id 和 r 设置为 0。

for {
  id = getId()
  id.recover {
    case e => {
      println(e.getMessage)
      0
    }
  }
  r = result(id, param, param)
} yield r.recover {
    case e => {
      println(e.getMessage)
      0
    }
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-24
    • 1970-01-01
    • 2011-04-19
    • 2015-12-30
    • 2019-05-25
    • 2014-07-04
    • 2015-01-21
    相关资源
    最近更新 更多