从 Scala Future 返回值

Returning value from a Scala Future

在下面的代码中,我尝试执行两个操作。一是在数据库中创建客户,二是在数据库中创建事件。事件的创建依赖于用户的创建。

我是 Scala 的新手,对 Futures 在这里的作用感到困惑。我正在尝试查询数据库并查看用户是否存在,如果不存在,则创建用户。下面的代码应该检查用户是否存在 customerByPhone() 函数,如果不存在,则进入 createUserAndEvent() 函数。

它实际做的是跳过 customerByPhone 的响应并直接进入 createUserAndEvent()。我认为通过使用平面图,程序会自动等待响应并且我不必使用 Await.result 是不是这样?有没有办法避免使用 Await.result 不阻塞生产代码的线程?

override def findOrCreate(phoneNumber: String, creationReason: String): Future[AvroCustomer] =  {
  //query for customer in db
  //TODO this goes into createUserAndEvent before checking that response comes back empty from querying for user
  customerByPhone(phoneNumber)
    .flatMap(_ => createUserAndEvent(phoneNumber, creationReason, 1.0))
}

您不需要使用 Await.result 或任何其他屏蔽。事实上,您确实从 customerByPhone 获得了结果,您只是使用 _ 忽略了它。我想你想要的是这样的:

customerByPhone(phoneNumber)
  .flatMap(customer => {
    if(customer == null)
      createUserAndEvent(phoneNumber, creationReason, 1.0)
    else
      Future(customer)
   })

您需要编写逻辑代码,以便仅在客户不在时才执行某些操作。