2017-02-16 11 views
1

は、以下のコードを考えてみましょうThe result is Sample future resultとなります。するonSuccess約ドキュメントhereから:抽出将来

型未来[T]のそのパラメータを評価し、今後は 正常に完了した後、型T の値としてその結果を抽出し、内側経路に渡し。

と与えられた例は次のとおりです。

val route = 
    path("success") { 
    onSuccess(Future { "Ok" }) { extraction => 
     complete(extraction) 
    } 
    } 

だから私は間違っているんですか?

答えて

2

askは、Future[T]を返します。パターンマッチハンドラーreceiveFuture[T]になりますので、Future[Future[String]]になります。

あなただけTを取得したい場合は、あなたのTestActorからFutureを削除:

case class TestResult(s: String) 
case "hello" => 
    sender ! TestResult("Sample future result") 
+0

を持つことができます!私の悪い! – codingsplash

0

を頼むの使用は、あなたが未来を開く必要がありonCompleteのR5ではルートでその後、避けられない場合は二回、あなたがそうであるようにFuture [Future [String]]を受け取ります。完全に

1のラップを解除されますし、私は完全に戻って、将来を依頼することを忘れてしまった

def r5: Route = { 
 
    pathPrefix("check") { 
 
     onSuccess(system.actorOf(Props[TestActor]).ask("hello")) { 
 
     successResult => { 
 
       successResult.Oncomplete { 
 
         case Success(res) => { 
 
           complete { 
 
             "The result is " + res //res will have Sample Future Result } 
 
         case Failure(ex) => complete("Some Error Occured") 
 
     
 
     } 
 
    } 
 
    }