object Main extends App {
val p1 = Promise[Option[String]]()
val p2 = Promise[Option[String]]()
val f1 = p1.future
val f2 = p2.future
val res = (for{
file1Opt <- f1
file2Opt <- f2
file1 <- file1Opt
file2 <- file2Opt
} yield {
combineFiles(file1, file2)
}).fallbackTo(Future.successful("Files not found"))
Thread.sleep(2000)
println("XXXXXXXXXXXXXXXXXXX")
p1.success(Some("file one"))
p2.success(Some("file two"))
val finalData = res.map(s =>
s + " " + "add more data to the file"
)
finalData.map(println(_))
def combineFiles(f1: String, f2: String): String = {
f1 + " " + f2
}
}
Mam dwie funkcje, które zwracają Future[Option[String]]
i potrzebuję połączyć dwa ciągi w jeden ciąg.Scala dla zrozumienia z przyszłością i opcjami
Chcę, aby dane wyjściowe były kombinacją dwóch łańcuchów i stopek: "plik jeden plik dwa dodają więcej danych do pliku" lub domyślnie, gdy jeden lub oba z s zwrócą None
: "Pliki nie znaleziono dodaj więcej danych do pliku".
Jak można to osiągnąć?
błąd kompilatora:
Error:(16, 11) type mismatch;
found : Option[String]
required: scala.concurrent.Future[?]
file1 <- file1Opt
^