Wie kann ich "reparieren" diese Antwort, ich wollte Zukunft [Option [F4]]Wie viele Schichten der Zukunft Option Zukunft in der Antwort
val f4Response: Future[Option[Future[Option[Future[F4]]]]] =
for {
f1Opt <- api.getF1() // Future[Option[F1]]
f2Opt <- if (f1Opt.isDefined) api.getF2(f1Opt.get.id) else Future.successful(None) // getF2 is Future[Option[F3]]
} yield {
for {
f1 <- f1Opt
f2 <- f2Opt
} yield {
for {
f3Opt <- api.getF3(f1.id, f2.id) // Future[Option[F3]]
} yield {
for {
f3 <- f3Opt
} yield {
api.insertF(f1, f2, f3) // Future[Option[F4]]
}
}
}
}
aktualisieren
Ich bin entfernen versuchen scalaz zu verwenden, aber ich erhalte eine Fehlermeldung:
val result: Future[Option[f4]] = (
for {
f1 <- OptionT(api.getF1(..))
f2 <- OptionT(api.getF2(..))
f3 <- OptionT(api.getF3(f1.id, f2.id)
} yield api.getF4(f1, f2, f3)
).run
Fehler ist:
[error] found : scala.concurrent.Future[Option[scala.concurrent.Future[F4]]]
[error] required: scala.concurrent.Future[Option[F4]]
Auch kann ich nicht zugreifen f1.id und f2.id in der Zeile:
f3 <- OptionT(api.getF3(f1.id, f2.id)
hat catz OptionT das gleiche wie scalaz OptionT verhalten? – Blankman
wenn ich versuche das mit scalaz zu tun, muss ich Probleme 1) Ich kann nicht f1.id, f2.id um f3 zu bekommen 2) es gibt Zukunft [Option [Zukunft [F4]] Ich füge hinzu, was ich habe jetzt meine Frage – Blankman
fast, Sie müssen nur etwas Syntax ändern (zB 'Wert' ->' run'), ich werde ein 'scalaz' Beispiel liefern ... –