Slick 3.1.x方法returns空列表

Slick 3.1.x method returns empty list

此方法使用 Slick 3.1.x,它 returns 正确地是一个 Future[List[Analysis]] 类型的对象,但列表始终为空。为什么会这样以及如何解决这个问题?

  def readMany = {
    val db = Database.forConfig("db1")
    var list = new ListBuffer[Analysis]()
    try {
        val query = TableQuery[AnalysisDB]
        val action = query.sortBy(_.name).result
        val future = db.run(action).map(_.foreach {
          case (analysis) => list += Analysis ( analysis.sk, analysis.name )
        })
        Future { list.toList }
    } finally db.close
  }

列表在填充之前返回。您的 val future(数据库调用)正在 ignored/discarded,并且返回 Future(list)(仍然是空的)。试试这个;

def readMany = {
  val db = Database.forConfig("db1")
  try {
    val query = TableQuery[AnalysisDB]
    val action = query.sortBy(_.name).result
    db.run(action).map(_.map {
      a => Analysis(a.sk, a.name)
    })
  } finally db.close
}

这也避免了臭味可变的 ListBuffer。