【发布时间】:2016-11-14 04:10:46
【问题描述】:
Slick 3 通过使用 flatMap 方法提供 DBIOAction 组合。此外,我们可以在两个 DBIOAction 之间在后端进行一些计算。这在大多数情况下都可以正常工作,但是当计算结果像 Future 这样的单子时我应该怎么做?有阻塞方式的代码:
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)
}
有没有办法异步执行此代码,无需等待?
【问题讨论】:
标签: postgresql scala slick slick-3.0