2

次のような関数があるとします (私は akka 2.0.2 を使用しています):

def foo(message: String): Future[SomeClass] =
  for {
    result <- actor ? message
  } yield SomeClass(result)

関数の呼び出し元が未来を設定onSuccessしてonFailureフックするので、アクターに約束を破ってもらいたい場合はakka.actor.Status.Failure、送信者に送り返すようにします。それはうまくいきます。fooさて、ある条件をチェックインして、条件が失敗/成功した場合に失敗した未来を返したい場合はどうすればよいでしょうか?

def foo(message: String): Future[SomeClass] =
  if(...) {
    ...//return failed future
  } else {
    for {
      result <- actor ? message
    } yield SomeClass(result)
  }

「失敗した未来を返す」ブロックはどうあるべきですか? また、それを実装するには実行コンテキストが必要ですか?

4

1 に答える 1

5

式を返すだけです: Promise.failed(new Exception)、例外は未来を失敗させたいものです。2.10 以降の Scala 標準ライブラリで Scala の future と promise を使用している場合、実行コンテキストは必要ありません。

Akka の先物とプロミスfailedには、プロミス メソッドの暗黙的な実行コンテキストが必要です。実行コンテキスト コンパニオン オブジェクトで使用可能なデフォルトの実行コンテキストが存在する必要があります。これは、ActorSystem使用可能なインスタンスがある場合に使用できます。

于 2012-06-27T08:47:26.927 に答える