2017-04-24 30 views
0

我有一個Int:Future [Try [Option [Int]]]從中我需要那個Int值。我有這樣的代碼:未來[嘗試[Option [Int]]]發現錯誤:models.TenantGlobalBranding [error] required:scala.concurrent.Future [?]

def fun(number: Future[Try[Option[Int]]]): Future[Result] = { 
    val num: Int = number.flatMap(x => processTry(x)) 
} 

def processTry(x: Try[Option[Int]]): Int = processOption(x.getOrElse(Some(101))) 
def processOption(x: Option[Int]): Int = x.getOrElse(101) 

我收到此錯誤需要:[?] scala.concurrent.Future

+1

什麼是'process','process2'?他們的簽名是什麼?請發佈你的問題[MCVE]。 –

回答

1

您可以利用模式匹配處理的答案和錯誤情況非常乾淨:

val result: Future[Try[Option[Int]]] 
result.onComplete { 
    case Success(Success(Some(i))) => // you get your i: Int 
    case Success(Success(None)) => // you get None 
    case _ => // Either the `Future` or the `Try` failed, you could also process both cases separately 
} 
0
  1. number.flatMap要求拉姆達回報Future[Int]。相反processTry被定義爲: Int。您可以用map代替flatMap
  2. 您已將num定義爲Int,而fun的結果爲Future[Result]。你錯過了一些代碼?
  3. val num = ...有類型Unit它與函數類型不同。

的代碼可能看起來像

def fun(number: Future[Try[Option[Int]]]): Future[Result] = { 
    val num: Future[Int] = number.map(x => processTry(x)) 
    num.map{i => Result(i)} 
} 
相關問題