J'ai un avenir imbriqué dans mon application Scala. Je suis conscient qu'il doit toujours y avoir un chemin vers la sortie/une méthode de retour - et je crois que c'est ce qui empêche cet avenir imbriqué.Vous ne pouvez pas échapper à un avenir imbriqué à Scala?
if (validRequest) {
onComplete("a mongo query happens here") {
case Success(result) =>
if (result.isEmpty) {
if (queryType.equals("id")) {
onComplete("a different mongo query happens here") {
case Success(result) =>
complete(HttpResponse(200))
case Failure(f) =>
complete(HttpResponse(500))
}
}
} else {
complete(HttpResponse(200))
}
case Failure(f) =>
complete(HttpResponse(500))
}
} else {
complete(HttpResponse(500))
}
Auparavant, lorsque cela ne permettait pas l'exécution d'une requête mongo distincte, il ressemblait à ceci;
onComplete("a mongo query") {
case Success(result) =>
complete(HttpResponse(200))
case Failure(f) =>
complete(HttpResponse(500))
}
Donc, beaucoup plus simpliste. Cependant, avec le besoin de la requête imbriquée, tout semble avoir mal tourné. L'erreur actuelle renvoyée par le compilateur est;
type mismatch;
[error] found : Unit
[error] required: spray.routing.RequestContext => Unit
[error] if (queryType.equals("id")) {
[error] ^
[error] one error found
[error] (compile:compileIncremental) Compilation failed
Cela me suggérer normalement que quelque chose ne revient pas - i.e.: une déclaration complète() n'est pas touché. Avec le pointeur sur l'erreur, la seule chose que je pourrais imaginer est que l'instruction switch pourrait avoir un résultat différent de Success/Failure, ce qui pourrait potentiellement se terminer avec la méthode ne retournant jamais. J'ai essayé d'ajouter un segment "case _ =>" qui a renvoyé l'erreur standard 500, mais en vain. J'ai également essayé une façon plus simple de définir a var avec la réponse int (200 ou 500), et de rejeter la réponse complete() à la fin, y compris celle-ci .. mais bien sûr, la complète () L'instruction est touchée rapidement et les threads ne renvoient jamais leurs résultats comme prévu.
Quelqu'un pourrait me conseiller sur ce que la meilleure voie à suivre pour résoudre ce problème est?
Une autre pendaison si/déclaration d'autre. Merci beaucoup pour l'aide! – Eoghan