【发布时间】:2017-08-02 22:04:56
【问题描述】:
在下面的代码中,我尝试执行两个操作。一种是在数据库中创建客户,另一种是在数据库中创建事件。事件的创建,依赖于用户的创建。
我是 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))
}
【问题讨论】:
-
我会考虑从您的数据库中寻找 upsert 支持。也许你的数据库库有原生支持。
标签: scala functional-programming flatmap