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
}
}
У меня есть две функции, которые возвращают Future[Option[String]]
, и мне нужно объединить две строки в одну строку.Scala для понимания с будущим и опциями
Я хочу, чтобы результат был либо комбинацией двух строк, либо нижнего колонтитула: «файл один файл два добавить больше данных в файл» или по умолчанию, когда один или оба из Future
s возвращают None
: «Файлы не найдены, добавьте больше данных для файла ".
Как это можно достичь?
Compiler ошибка:
Error:(16, 11) type mismatch;
found : Option[String]
required: scala.concurrent.Future[?]
file1 <- file1Opt
^