2017-03-07 11 views
0

私のシナリオは、複数のAPIコールを作成する必要があり、それぞれに以前のコールのデータを使用する必要があります。SCALA:将来のコールバック内で将来コールバックを開始する方法

ここでは、将来のAPI呼び出しを行い、最初の呼び出しの応答を返すとします。最初の呼び出しの完了時に次のAPIを呼び出すことができません。

+0

コードを共有できますか? – emaillenin

答えて

4

あなたがfor yield構文を使用することである、flatMapや先物のの束を配列決定にクリーンな代替手段を使用することができflatMap機能

def firstApiCall(): Future[FirstRes] 

def secondApiCall(firstRes: FirstRes): Future[SecondRes] 

def combinedCall()(implicit ec: ExecutionContext): Future[SecondRes] = firstApiCall.flatMap(res => secondApiCall(res)) 
+0

これは私の質問に答えるが、firstApiCALLとsecondAPICallを使用して、同じ関数呼び出しを使用してAPIを処理できますか? –

+0

私はこの質問を正確に理解していませんが、これが答えるなら、好きなだけ多くのflatMap呼び出しを組み合わせることができます。 – mavarazy

2

で先物をリンクすることができます。それは、内部的にはflatMapmapwithFilterメソッド呼び出しに変換される時間の砂糖をコンパイルするだけですが、一般にはより洗練されて読みやすくなります。

import scala.concurrent.ExecutionContext.Implicits.global 

for { 
    first <- firstApiCall() 
    second <- secondApiCall(first) 
} yield second