【问题标题】:Reactivemongo: How to handle an exception that happens Inside Iteratee.foldReactivemongo:如何处理 Iteratee.fold 内部发生的异常
【发布时间】:2014-07-20 22:40:14
【问题描述】:

似乎 reacitvemongo 枚举器没有正确处理异常。下面的代码使用一个枚举器(由 reactivemongo 驱动程序返回)来创建一个列表,这里的问题是,当 fold 函数内部出现异常时,请求挂起并且浏览器根本没有得到响应(加载器无限旋转)

def specialTalks() = AdminAction.async {
implicit request => {
  val query = Json.obj(("status" -> 3))
  val res = talks.find(query).sort(Json.obj(("title" -> 1))).cursor[JsObject]
    .enumerate() |>>> Iteratee.fold[JsObject, List[JsObject]](List[JsObject]())((theList, aTalk) => {
    // an exception may happen here
    if (((aTalk \ "hex").as[String]).length == 24)
      theList :+ aTalk
    else
      theList
  }).map(l => {
    Ok(Json.toJson(Json.obj(("talks" -> l))))
  })
  res.recover({case _ => InternalServerError("Not a hex talk")})
}}

它甚至无法从失败的执行中恢复。

我在这里遗漏了一些东西,或者它是 reactivemongo 枚举器中的错误?

【问题讨论】:

    标签: playframework playframework-2.2 enumerator reactivemongo iterate


    【解决方案1】:

    Cursor.enumerate() 返回的枚举器存在一个错误,导致它无法正确传播应用迭代器时发生的任何错误。

    我已经向 Reactivemongo 团队发送了一个拉取请求来解决这个问题,详细信息可以在这里找到:

    https://github.com/ReactiveMongo/ReactiveMongo/pull/191

    【讨论】:

      猜你喜欢
      • 2015-09-11
      • 2020-05-25
      • 1970-01-01
      • 1970-01-01
      • 2020-05-17
      • 2013-08-13
      • 1970-01-01
      • 2012-09-26
      • 1970-01-01
      相关资源
      最近更新 更多