未来不返回任何东西

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 方法)。

【讨论】:

以上是关于未来不返回任何东西的主要内容,如果未能解决你的问题,请参考以下文章

Django:Filter()不返回任何东西

objectForKey 不返回任何东西

jQuery:如果 $('#id') 不匹配任何东西会返回啥?

Btrace 不返回任何东西

在孩子上添加不返回任何东西

NSFetchRequest 不返回任何东西