首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala :理解Future.recover

Scala :理解Future.recover
EN

Stack Overflow用户
提问于 2018-07-27 20:19:56
回答 2查看 1.3K关注 0票数 2

我正在尝试使用Future.recover (通过intelJ中的scala表单,如果它有任何重要性的话)

代码语言:javascript
复制
import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global

def get():Future[Int] = {
  throw new ClassCastException
}

val n = get().map{
  x => x + 1

}.recover{
  case e: Throwable => print("we recovered")
    0
}

n.map(print(_)) // not getting here

我原以为0会被打印出来。然而,这是我得到的:

代码语言:javascript
复制
java.lang.ClassCastException
    at #worksheet#.get(test.sc:5)
    at #worksheet#.n$lzycompute(test.sc:8)
    at #worksheet#.n(test.sc:8)
    at #worksheet#.get$$instance$$n(test.sc:8)
    at A$A76$.main(test.sc:32)
    at #worksheet#.#worksheet#(test.sc)

为什么我的recover不工作。我是不是用错了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-27 20:24:36

您的get函数没有返回Future。它会立即抛出ClassCastException。您需要在某个位置创建Future

将您的get函数更改为:

代码语言:javascript
复制
def get(): Future[Int] = Future {
    throw new ClassCastException
}
票数 6
EN

Stack Overflow用户

发布于 2018-07-28 18:36:37

你可能想要这样的东西:

代码语言:javascript
复制
Future.failed(new ClassCastException)

签名是:

代码语言:javascript
复制
def failed[T](exception: Throwable): scala.concurrent.Future[T]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51557846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档