2016-11-24 4 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

Метод перенастраивает вектор вместо списка. Обратите внимание, что действие имеет 'sortyBy', любые шансы, что к вектору можно получить доступ к неупорядоченным? – ps0604

+0

Если вам нужен Список, добавьте '.toList' во внутреннюю' map': 'db.run (action) .map (_. Map {...}. ToList)' Заказ определенно не будет потерян. – retrospectacus

Смежные вопросы