未来不返回任何东西
Posted
技术标签:
【中文标题】未来不返回任何东西【英文标题】:Future not returning anything 【发布时间】:2020-04-09 22:38:55 【问题描述】:尝试从数据库中获取结果并返回未来的结果集。但问题是在访问未来结果时我没有得到任何回应。
下面是代码片段:
def getAll(): Future[Iterable[Employee]] =
Future
fetchEmployees()
(ec)
def fetchEmployees(): Iterable[Employee]=
var empList = ListBuffer[Employee]()
db.withConnection conn =>
val statement = conn.createStatement()
val rs = statement.executeQuery("Select * from Employee")
while (rs.next())
println(rs.getString("EmpCode")+" "+rs.getString("FirstName")+" "+rs.getString("LastName"),rs.getString("Department"))
val emp = Employee(rs.getString("EmpCode"),rs.getString("FirstName"),rs.getString("LastName"),rs.getString("Department"))
empList.appended(emp)
empList
这是尝试访问返回未来对象的地方
def findAll: Future[Iterable[EmployeeResource]] =
println("Inside resource handler")
repository.getAll().map(iterableEmp =>
iterableEmp.foreach(emp => println(s"Name is $emp.firstName"))
iterableEmp.map(emp=>createResource(emp))
)(ec)
什么都不打印。
【问题讨论】:
【参考方案1】:查看appended
方法的文档——并注意术语,它不是“附加”(如在命令中),而是“附加”,如如果.. .
def appended[B >: A](elem: B): ListBuffer[B]
此序列的副本,附加一个元素。
您的代码:
empList.appended(emp)
创建一个新的 ListBuffer,但您丢弃了它的结果,并且您的初始列表缓冲区从未实际修改过。 (打开-Ywarn-value-discard
scalac 选项总是一个好主意!)
您需要使用+=
运算符(或addOne
方法)。
【讨论】:
以上是关于未来不返回任何东西的主要内容,如果未能解决你的问题,请参考以下文章