slick - 包含在 for 理解中的 DBIOAction 是否总是按顺序运行?
问题描述
我知道 Scala 中的 Futures 在组合为推导式时会按顺序运行,除非它们在推导式之外声明(如本文所述)。DBIOActions 的工作方式是否相同?例如在下面的查询中,query1
保证之前执行query2
?
db.run {
for {
result1 <- query1.result
result2 <- query2.result
} yield (result1, result2)
}
解决方案
是的!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
推荐阅读
- sql - 使用 DBLink 查询的奇怪行为
- spring - Spring boot 项目未解决依赖项 - 无法在 org.springframework.boot:spring-boot-starter-web:jar:2.1.1.RELEASE 收集依赖项
- r - 使用 dplyr 的重新编码仅重新编码列中的一些数值
- java - SHA1 Java 与 Python 不一样
- python - 使用 CSV 中的数据迭代 url 以获取 API 数据 - Python
- ios - iOS - Urban Airship - 处理多个后台远程通知
- c# - Unity2D从数组c#中改变精灵图像
- python - QtQuick GeometryChanged 方法仅适用于加载组件的一个方向
- knockout.js - 使 observable 不更新输入值
- typescript - 使用数据库的环回 4 身份验证