У меня есть приведенный ниже код, и в моей функции findOrCreate()
я получаю сообщение об ошибке Type mismatch found Unit, required Future[Customer]
. Функция customerByPhone()
, которая вызывается внутри findOrCreate()
, также содержит вызовы, ожидающие фьючерсы, поэтому я использую толстую карту. Я не знаю, почему в результате плоской карты получается Unit
. Что я делаю не так?
override def findOrCreate(phoneNumber: String, creationReason: String): Future[AvroCustomer] = {
//query for customer in db
val avroCustomer: Future[AvroCustomer] = customerByPhone(phoneNumber).flatMap(_ => createUserAndEvent(phoneNumber, creationReason, 1.0))
}
override def customerByPhone(phoneNumber: String): Future[AvroCustomer] = {
val query = Schema.Customers.byPhoneNumber(phoneNumber)
val dbAction: DBIO[Option[Schema.Customer]] = query.result.headOption
db.run(dbAction)
.map(_.map(AvroConverters.toAvroCustomer).orNull)
}
private def createUserAndEvent(phoneNumber: String, creationReason: String, version: Double): Future[AvroCustomer] = {
val query = Schema.Customers.byPhoneNumber(phoneNumber)
val dbAction: DBIO[Option[Schema.Customer]] = query.result.headOption
val data: JsValue = Json.obj(
"phone_number" -> phoneNumber,
"agent_number" -> "placeholder for agent number",
"creation_reason" -> creationReason
)
//empty for now
val metadata: JsValue = Json.obj()
//creates user
val avroCustomer: Future[AvroCustomer] = db.run(dbAction).map(_.map(AvroConverters.toAvroCustomer).orNull)
avroCustomer.onComplete({
case Success(null) => {
}
//creates event
case Success(customer) => {
val uuid: UUID = UUID.fromString(customer.id)
//create event
val event: Future[CustomerEvent] = db.run(Schema.CustomerEvents.create(
uuid,
"customer_creation",
version,
data,
metadata)
).map(AvroConverters.toAvroEvent)
}
case Failure(exception) => {
}
})
Future.successful(new AvroCustomer)
}
val
возвращаетUnit
. - person Reactormonk   schedule 12.03.2017val foo: Int = { val bar = 32 }
выдаст ошибку компиляции. - person Reactormonk   schedule 12.03.2017val
создает неизменяемую переменную с указанным значением, но не возвращает это значение, как в таком языке, как C. - person jwvh   schedule 12.03.2017