2
Slick 3使用flatMap方法提供了DBIOAction組合。另外,我們可以在兩個DBIOAction之間的後端進行一些計算。這在大多數情況下都可以正常工作,但是當計算結果在未來的monad中時,我應該怎麼做?有代碼阻塞方式:如何在光滑3中使用Future內部的DBIOAction組合?
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)
}
有沒有辦法異步執行此代碼,沒有等待?