2

recitvemongo 列挙子が例外を正しく処理していないようです。以下のコードは列挙子 (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")})
}}

失敗した実行から回復することさえありません。

ここで何かが足りないのですか、それとも reactmongo 列挙子のバグですか?

4

1 に答える 1

2

Cursor.enumerate() によって返される列挙子にバグがあり、 iteratee の適用時に発生するエラーを正しく伝播できません。

これを修正するために、Reactivemongo チームにプル リクエストを送信しました。詳細は次の場所にあります。

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

于 2014-08-08T11:23:40.427 に答える