2014-06-12 75 views
0

是否有更優雅的方式從Future[Option[Int]]獲取Int值而不是使用finalFuture.value.get.get.get獲取Int值形式的優雅方式Future [Option [Int]]

這是我到目前爲止有:

val finalFuture: Future[Option[Int]] = result.contents 

    finalFuture.onComplete { 
       case Success(value) => println(s"Got the callback with value = ", finalFuture.value.get.get.get) 
       case Failure(e) => e.printStackTrace 
      } 

回答

3

,你可以窩比賽:

finalFuture.onComplete { 
    case Success(Some(value)) => println(s"Got the callback with value = ", value) 
    case Success(None) =>() 
    case Failure(e) => e.printStackTrace 
} 
1

您可以使用foreachOption[A]一個A => Unit功能適用於價值,如果它存在。

fut.onComplete { 
    case Success(opt) => opt.foreach { val => 
    println(s"Got the callback with value = {}", val) 
    } 
    case Falure(ex) => ex.printStackTrace 
}  
0

您還可以使用嘗試獲取選項[選項[INT]]的toOption,然後壓平拿到選項[INT]

def printVal(finalFuture: Future[Option[Int]]) = finalFuture.onComplete( 
    _.toOption.flatten.foreach(x=> println (s"got {}",x)) 
) 

編輯:那假設你不關心堆棧跟蹤:)