je la méthode d'essai suivanteGestion des exceptions avec Scala futur scénario n'a
def test() = {
val aa = Future{10} map {
case x if x%2 == 0 => (x,x)
case _ => val kk = Future.failed(BadRequestException("dd")); kk
}
aa
}
Si je supprime le case _
alors le type de retour méthode est Future[(Int, Int)]
ce qui est exactement ce que je veux. Cependant, quand j'ajoute le scénario case _
le type de retour devient Future[Object]
. Je ne suis pas en mesure de comprendre ce que dois-je changer que d'autres méthodes similaires dans notre base de code font des choses similaires (je suis sûr que je manque quelque chose de subtil) et le type de retour reste de la nature Future[(Int, Int)]
. Après tout, quand je lance une exception pour un scénario, je ne voudrais pas que le type de retour de la méthode soit changé. Qu'est-ce que je manque ou fais mal?
oh Bonne prise, je l'ai maintenant, à tuple plutôt que de retour, je peux retourner l'avenir de celui-ci, puis flatMapping il prend soin de lui, sinon je vais me 'avenir [Future..'. Je comprends cette partie. Ce que je ne comprends toujours pas, c'est pourquoi le compilateur est content maintenant et accepte le type de retour que je veux. – curiousengineer
parce que dans les deux cas, les types de retour sont 'Future [(Int, Int)]' et 'avenir [BadRequestException]' et l'union de ce type de retour est 'Future [(Int, Int)]'. alors que dans votre opération de carte d'origine deux types de retour étaient 'Future [(Int, Int)]' et 'Future [Future [BadRequestException]]' qui se traduit par un type d'union de 'Future [Object]' –
Où puis-je lire à ce sujet? un peu plus. Merci beaucoup pour cette explication concise et claire. Je veux en savoir plus sur les types de syndicats aboutissent à quel type ultime – curiousengineer