【问题标题】:How catch exception using Iteratee.foreach in Future如何在未来使用 Iteratee.foreach 捕获异常
【发布时间】:2015-09-23 14:45:15
【问题描述】:

我正在使用 Play Framework 2.2 和 ReactiveMongo。我正在遍历从 ReactiveMongo 收到的所有条目,并从单个条目中获取一些属性。有时它会抛出不存在属性的异常,我应该如何捕获它,现在使用简单的“恢复”不起作用。

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
}

【问题讨论】:

    标签: future playframework-2.2 reactivemongo iterate


    【解决方案1】:

    Iteratee.foreach 总是返回 Unit 类型,所以值 processingData 将不包含数据并且枚举器应用一些 Iteratee 仅将 iteratee 附加到枚举器,但不要运行它。我想,这一定能解决你的问题:

    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 
    

    【讨论】:

      猜你喜欢
      • 2015-03-16
      • 1970-01-01
      • 2016-05-10
      • 2018-04-08
      • 1970-01-01
      • 1970-01-01
      • 2010-09-28
      • 2012-05-31
      相关资源
      最近更新 更多