2016-11-24 18 views
0

このメソッドはSlick 3.1.xを使用し、Future[List[Analysis]]のオブジェクトを正しく返しますが、リストは常に空です。それはなぜですか、これを修正する方法は?Slick 3.1.xメソッドは空のリストを返します

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 
    } 

答えて

1

リストが作成される前に返されています。 val future(データベース呼び出し)は無視/破棄され、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も回避されます。

+0

このメソッドは、Listの代わりにVectorを返します。アクションには 'sortyBy'があります。これは、ベクトルに順序付けられていないアクセス可能性がありますか? – ps0604

+0

リストが必要な場合は、内部の 'map'に' .toList'を追加してください: 'db.run(action).map(_。map {...}。toList)' 注文は間違いなく失われません。 – retrospectacus

関連する問題