【发布时间】:2015-09-21 23:48:30
【问题描述】:
我有一个方法应该遍历 Future 并返回一个 Tuple。这里是:
private def myMethod(id: Long): Future[(Double, Double)] = {
val result = for {
someValue <- run { getFromDb(id).headOption }
value <- someValue
} yield {
value.valueType match {
case ValueType.TypeA => (1.0, 1.0)
case ValueType.TypeB => (2.0, 2.0)
}
}
}
这是我的运行方法:
private def run[R](dbio: slick.dbio.DBIOAction[R, slick.dbio.NoStream, scala.Nothing]) = async {
await(db.run(dbio))
}
它使用 Scala Async 库来计时我对数据库的调用!
getFromDB 方法只是做一个查询:
def getFromDb(myId: Long) {
MyTableQuery.filter(_.id === myId)
}
它抱怨 myMethod 返回一个 Future[Nothing]。我在这里看不到任何问题。关于什么可能不满足我正在寻找的返回类型的任何线索?
【问题讨论】:
-
async {await(db.run(dbio))}和db.run(dbio)不一样吗? -
是的,但这不是问题!当我对数据库进行多次调用时,我可以使用 run 方法定时运行它!
-
明白。
run的返回类型是什么?因为您再次对返回值进行平面映射,这表明您有类似Future[Future[T]]作为返回值,这似乎很奇怪。 -
run的返回类型是Future[R]
-
...和
R因此是从getFromDb推断出来的,它的定义也丢失了。请发布完整的 sn-p。