2017-04-24 2 views
0

J'ai un Int: Future [Essayez [Option [Int]]] à partir de laquelle j'ai besoin de cette valeur Int. J'ai un code comme ceci:Futur [Essayez [Option [Int]]] indiquant une erreur: models.TenantGlobalBranding [erreur] requis: 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) 

Je reçois cette erreur nécessaire: [?] De scala.concurrent.Future

+1

Qu'est-ce 'processus',' process2'? Quelles sont leurs signatures? Veuillez poster un [MCVE] de votre problème. –

Répondre

1

Vous pouvez tirer parti de la correspondance de modèles pour traiter la réponse et les cas d'erreur très propre :

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. Votre number.flatMap exige que lambda retour Future[Int]. A la place processTry est défini comme : Int. Vous pouvez remplacer flatMap par map.
  2. Vous avez défini num comme Int, alors que le résultat de fun est Future[Result]. Avez-vous manqué du code?
  3. val num = ... a le type Unit et est différent du type de fonction.

Le code pourrait ressembler à

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