Я использую Scala/Slick 3.1 (все это через активатор разбрызгивания распылителя) и имеет 4 разных запроса, которые я хочу вернуть как один объект. Я пытаюсь собрать все будущее вместе в одно будущее.Scala для понимания и опций
Это работает, но проблема в том, что если запрос терпит неудачу (I.e., мы ищем что-то, что не существует), существует исключение во время выполнения.
То, что я думаю, что на самом деле это не в состоянии все это, если один запрос не удается, и в конечном итоге вернуть будущее [Option]
Все это подключается через спрей
поэтому код запроса выглядит следующим образом:
// .. snip .. FindById()
val a = db.run(q1.result) // Future[Seq[Tuple]]]
val b = db.run(q2.result)
val c = db.run(q3.result)
val d = db.run(q4.result)
// compose the futures together into one future
val res = for {
resA <- a
resB <- b
resC <- c
resD <- d
} yield {
PhoneMerged(resA.head._1, resA.head._2, resB.map(x => FeaturesSimple(x.featurename)).toList, resD.map(x => FeaturesvaluepairSimple(x.featuretype, x.featurevalue)).toList,
resC.map(x => IncludedaccessorySimple(x.accessoryvalue)).toList, createPhoneImage(resA.head._1.devicemcd))
}
Она вызывается с
onComplete((modules.phonesDAA ? FindById(id)).mapTo[Future[PhoneMerged]]) {
case Success(phoneOption) => {
println(phoneOption)
complete(phoneOption)
}
case Failure(ex) => {
println("uh oh")
complete("{}")
}
}
в конечном счете, я хочу вернуть либо сериализованный JSON объект PhoneMerged (который работает, если я ищу действительный идентификатор), либо «{}» пустой json ...
У кого-нибудь есть мысли о том, как правильно обрабатывать результат/обрабатывать ошибка ?