我使用Play Framework 2.2和ReactiveMongo。我正在迭代来自ReactiveMongo的所有收到的条目,并从单个条目中获取一些属性。有时它会抛出不存在的属性的异常,我应该如何捕获它,现在使用简单的" recover"不起作用。
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 :(得分: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