Slick 3 предлагает композицию DBIOAction с использованием метода flatMap. Кроме того, мы можем сделать некоторые вычисления в фоновом режиме между двумя DBIOActions. В большинстве случаев это прекрасно работает, но что делать, когда результаты вычислений происходят в монаде, таком как Future? Существует код с блокировкой:Как использовать Будущее внутри композиции DBIOAction в slick 3?
val fooQuery = TableQuery[FooTable]
val barQuery = TableQuery[BarTable]
def requestService(content: Iterable[String]): Future[Iterable[Long]] = ???
def modify(ids: Iterable[Long], change: String) = {
val query = fooQuery.filter(_.id inSet ids).result.flatMap{ fooSeq =>
val content = fooSeq.map(_.contentField)
val requestServiceFuture = requestService(content)
val serviceResult = Await.result(requestServiceFuture, 1.minute)
barQuery.filter(_.id inSet serviceResult).delete //or other action
}
db.run(query.transactionally)
}
Есть ли способ выполнить этот код асинхронно, без Await?