0

わかりました、Akka Futures を返す関数への一連の呼び出しがあり、flatMap と map を次のように使用してそれらを連鎖させています。

doAsyncCall(..).flatMap { res1 =>
  doAsyncCall2(..).flatMap { res2 =>
    doAsyncCall3(..).map { res3 =>
      res
    }
  }
}

これは、さまざまな関数呼び出しに分散できます。これらの doAsyncCallX 呼び出しのそれぞれが Future[Result] を返すようになりました。これらの結果を構成し、最終的にチェーン内のすべての結果の構成された結果を返すことができるまでチェーンに渡したいと思います。

これを行うために、各 doAsyncCallX が前の結果の暗黙的なパラメーターを受け取り、取得した結果を前の結果と結合することを考えました。問題は、ライブラリの使用を次のような暗黙の値で散らかさない限り、これを行う方法がわからないことです。

doAsyncCall(..).flatMap { res1 =>
  implicit val implicitRes1 = res1
  doAsyncCall2(..).flatMap { res2 =>
    implicit val implicitRes2 = res2
    doAsyncCall3(..).map { res3 =>
      res
    }
  }
}

私がやりたいことは、 flatMap のアプリケーションをインターセプトして、前の応答が次の doAsyncCallX 呼び出しの暗黙的なパラメーターとして正しく渡されるようにすることです。これを達成する方法について何か考えはありますか?

4

1 に答える 1

2

何かが足りないかもしれませんが、暗黙を使用する理由はありますか?

for(res1 <- doAsyncCall1(..);
    res2 <- doAsyncCall2(res1);
    res3 <- doAsyncCall3(res2)) yield(res3)

中間結果の複数を構成する結果を返す必要がある場合は、yieldを変更して、別の何か、おそらくタプルなどを生成しyield((res1,res2,res3))ます。その結果は次のようになりますFuture[(Result1,Result2,Result3)]

于 2012-08-14T01:02:10.420 に答える