2015-09-23 7 views
1

Я использую Play Framework 2.2 и ReactiveMongo. Я повторяю все полученные записи от ReactiveMongo и получаю некоторое свойство из одной записи. Иногда он выдает исключение из несуществующего свойства, как его поймать, поскольку теперь использование простого «восстановления» не работает.Как исключение catch с использованием Iteratee.foreach в будущем

val cursor:Cursor[JsObject] = // QUERY FOR DATA 
val processingData = cursor.enumerate().apply(Iteratee.foreach { doc => 
    (doc \ "property") 
} 

processingData.map { data => 
    Logger.info(s"$data") 
    None 
}.recover { 
    case e => 
     Logger.error(s"Error during parsing $e") 
     None 
} 

ответ

0

Iteratee.foreach всегда возвращают тип блока, поэтому значение processingData не будет содержать данные и переписчик применить некоторые Iteratee только приложить iteratee к emumerator, но не запускать его. Я думаю, это должно решить вашу проблему:

val cursor:Cursor[JsObject] = // QUERY FOR DATA 

val getData = Enumeratee.mapM[JsObject]{doc => 
    Future(doc \ "property") //use future to catch exception here 
} 

val processingData: Future[scala.List[JsObject]] = cursor.enumerate() &> getData .run Iteratee.getChunks