【发布时间】:2016-05-13 15:51:09
【问题描述】:
我正在尝试将数据库合并到我的 http 微服务中。
微服务有一个函数getValueFromInternet(val: Foo): Future[Value],我的微服务正在根据GET 请求调用它。现在,我希望它发生这样,一个函数getValue(val: Foo): Future[Value] 将首先查询一个数据库,如果数据库没有返回结果,调用getValueFromInternet。数据库查询返回一个Future[Seq[Value2]],我可以在其中使用函数将 Value2 转换为 Value。如果没有找到与该值对应的条目,则返回一个空的Vector。
这是我迄今为止尝试过的:
def getValue(val: Foo): Future[Value] = {
val resultFuture = db.getValue(val)
// 1st attempt. Clearly wrong
resultFuture onComplete {
case Success(Vector()) => getValueFromInternet(val)
case Success(vec) => convertValue2to1(vec.head)
}
// 2nd attempt. This is also wrong
resultFuture match {
case Future(Success(Vector())) => getValueFromInternet(val)
case Future(Success(vec)) => convertValue2to1(vec.head)
}
}
【问题讨论】:
-
请附上问题的minimal self-contained 描述。我们可以仅使用问题本身给出的代码编译的东西更有可能得到答案并对他人有用。
-
关于 scala 2.12 中的期货,查看github.com/viktorklang/blog