首页 > 解决方案 > 包含在 for 理解中的 DBIOAction 是否总是按顺序运行?

问题描述

我知道 Scala 中的 Futures 在组合为推导式时会按顺序运行,除非它们在推导式之外声明(如本文所述)。DBIOActions 的工作方式是否相同?例如在下面的查询中,query1保证之前执行query2

db.run {
  for {
    result1 <- query1.result
    result2 <- query2.result
  } yield (result1, result2)
}

标签: slickscalaquery

解决方案


是的!query1保证在之前运行query2。请记住,for 推导等效于:

query1.reult.flatMap(result1 => query2.result.map(result2 => (result1, result2))

DBIOAction 上的 flatMap 文档指出“使用成功执行此操作产生的结果进行计算,然后按顺序运行下一个操作。” http://slick.lightbend.com/doc/3.2.0/api/index.html#slick.dbio.DBIOAction@flatMap


推荐阅读