2

ユーザーが投稿したデータに基づいてさまざまなコード スニペットを生成する必要があるため、これらのスニペットの生成を並列に行うことができます。

val p = for {
  pr <- Future { ProviderGenerator.generate(content) }
  c <- Future { ModelGenerator.generate(content) }
} yield(pr, c)

Async {
  if (p.isCompleted)
    println("Futures completed")
  p.onSuccess({
    case (pr: ActionResult, c: ActionResult) => {
      response.add(pr)
      response.add(c)
      Ok(Json.toJson(response))
    }
  })
  p onFailure {
    case _ => println("It failed")
  }
  p.map {
    case (pr: ActionResult, c: ActionResult) => {
      println("I am in case")
      response.add(pr)
      response.add(c)
      Ok(Json.toJson(response))
    }
    case _ => {
      println("I am in else case")
      Ok(Json.toJson(response))
    }
  }
}

これは結果をユーザーに送信することはありません。単一の未来を使用しているかのように、応答を得ています。このような複数の先物をどのように処理しますか?

4

1 に答える 1

0

明らかな問題は見当たりません。おそらくを追加してみて、p onFailure { case e: Throwable => Logger.error("failed", e) }1 つの未来が完了していないことを示しているかどうかを確認してください。

于 2013-06-01T04:18:26.850 に答える