For the following snippet IDEA gives a warning, that future {None}
would be redundant:
queryString match {
case Some(query) => ... // Do async call
case None => future { None }
}
Is there a better possibility to do it?
For the following snippet IDEA gives a warning, that future {None}
would be redundant:
queryString match {
case Some(query) => ... // Do async call
case None => future { None }
}
Is there a better possibility to do it?
你可以创建一个已经设定的未来而不产生闭包,使用Future.successful[T](result: T)
,所以也许Future.successful(None)
是你想要的。
但是,由于期货已经独立于其类型参数区分成功和失败,因此您也可以通过 表示失败Future.failed(new Exception("No query string"))
,因为您的异步调用也可以省略包装 in Some
。
我不知道 IDEA 的警告在这种情况下是否有帮助。
您可以通过将匹配推到未来来使其静音:
future {
queryString match {
case Some(query) => Some(computeResult(query))
case None => None
}
}
(或更简单地说future { queryString.map(computeResult(_)) }
:)
我想我自己解决了这个问题:我不需要封装在我的 Future 中的 Option,因为 Future 本身也可能失败,因此失败有点等于 None。
现在我只返回一个 Future 并且:
queryString match {
case Some(query) =>
//async Call which returns a Future without Option
case None => throw new Exception("Error")
}