2012-02-07 6 views
1

からアッカ未来の私が持っている、そのようなコード例構築物のスカラ/コールバック

val request: Defered[Int] = client.getSomeIntAsynFromSocket(); 

request.addCallBack(result => result.success[String]) 
request.addErrback(error => error.fail[Integer]) 

ことが可能に構成することであるどのように未来の[検証[文字列、INT]] deferedの要求 'と利用できるコールバック

から

= ===========================

解決策私自身から:

val f = Future { 
    val queue = java.util.concurrent.ArrayBlockingQueue[Validation[String, Int]](1) 

    val request: Defered[Int] = client.getSomeIntAsynFromSocket(); 
    request.addCallBack(result => queue.add(result.success[String])) 
    request.addErrback(error => queue(error.fail[Integer])) 

    f.take 
} 

答えて

4

Fo r Akka 2.x、以下のメソッドをどこかに置くと、インポートによって再利用できます。

def asFuture[T](d: Defered[T])(implicit e: ExecutionContext): Future[T] = { 
    val p = Promise[T]() 
    d.addCallback(r => p tryComplete Right(r)) 
    d.addErrback(e => p tryComplete Left(e)) 
    p.future 
} 

val f = asFuture(client.getIntAsynFromSocket()) 
関連する問題