【问题标题】:Do DBIOActions composed in for comprehensions always run sequentially?包含在 for 理解中的 DBIOAction 是否总是按顺序运行?
【发布时间】:2019-04-03 18:26:37
【问题描述】:

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

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

【问题讨论】:

    标签: slick scalaquery


    【解决方案1】:

    是的! 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-21
      • 2010-11-18
      • 1970-01-01
      相关资源
      最近更新 更多