У меня есть метод, который должен переходить через Будущее и возвращать Кортеж. Вот оно:Scala Будущее для понимания
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)
}
It жалобы, MyMethod возвращает будущее [Nothing]. Здесь я не вижу никаких проблем. Какие-нибудь подсказки относительно того, что может не удовлетворять возвращаемому типу, который я ищу?
Не 'асинхронной {Await (db.run (dbio))}' же, как только 'db.run (dbio)'? –
Да, но это не проблема! Когда у меня есть несколько вызовов в базе данных, я могу запустить его последовательно, используя метод run! – sparkr
Понял. Каков тип возврата 'run'? Потому что ваши данные снова отображаются над возвращаемым значением, указывая на то, что у вас есть что-то вроде «Future [Future [T]]» в качестве возвращаемого значения, что кажется странным. –