似乎重新启动枚举器并未正确处理异常。下面的代码使用一个枚举器(由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")})
}}
它甚至无法从失败的执行中恢复过来。
我在这里遗漏了一些东西,或者它是反应性调查员的错误?
答案 0 :(得分:2)
Cursor.enumerate()返回的枚举数存在一个错误,导致无法正确传播应用迭代时发生的任何错误。
我已向Reactivemongo团队发送拉取请求以解决此问题,详情请见此处: