Playframework Reactivemongo:如何处理Iteratee.fold内部发生的异常

Playframework Reactivemongo:如何处理Iteratee.fold内部发生的异常,playframework,playframework-2.2,enumerator,reactivemongo,iterate,Playframework,Playframework 2.2,Enumerator,Reactivemongo,Iterate,似乎reacitvemongo枚举数没有正确处理异常。下面的代码使用一个枚举器(由reactivemongo驱动程序返回)创建一个列表,这里的问题是,当fold函数中出现异常时,请求将挂起,浏览器根本无法获得响应(加载程序无限旋转) 它甚至无法从失败的执行中恢复 我这里缺少了一些东西,或者这是reactivemongo枚举器中的一个错误?Cursor.enumerate()返回的枚举器上有一个错误,使得它无法正确传播应用迭代对象时发生的任何错误 我已向Reactivemongo团队发送拉取请求以

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

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


我这里缺少了一些东西,或者这是reactivemongo枚举器中的一个错误?

Cursor.enumerate()返回的枚举器上有一个错误,使得它无法正确传播应用迭代对象时发生的任何错误

我已向Reactivemongo团队发送拉取请求以解决此问题,详细信息可在此处找到:

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")})
}}