Я хочу последовательно обрабатывать это вложенное будущее для каждого элемента, который я передаю с помощью итератора.
Я связал фьючерсы с помощью flatMap и Map, правильно ли это?
Что мне нужно сделать, чтобы выполнить процесс желаемым образом (показано ниже) с использованием какого-либо инструмента блокировки и без него?
object Main{
Iterator.foreach{e=>
process(e)
}
}
object A {
def doOne(e): Future[Any] = Future {
println("startFirst"); Thread.sleep(3000);
}
def doTwo(Any): Future[Any] = Future {
println("startSecond"); Thread.sleep(1000);
}
def doThree(Any): Future[Any] = Future {
println("do 3"); Thread.sleep(1000);
}
def doFour(e,Any): Future[Unit] = Future {
println(s"do 4&processComplete$e"); Thread.sleep(1000);
}
def process(e):Future[Unit]={
val a= doOne(e)
.flatMAp{a=> doTwo(a)}
.flatMap{b=>doThree(b)}
.map{c=> doFour(c)}
}
Если я передам 3 элемента (e1,e2,e3) в процесс определения, я ожидаю, что программа напечатает:
startFirst (e1)
startSecond(e1)
startThree (e1)
startFour&processComplete (e1)
startFirst (e2)
startSecond(e2)
startThree (e2)
startFour&processComplete (e2)
startFirst (e3)
startSecond(e3)
startThree (e3)
startFour&processComplete (e3)
Вместо:
startFirst (e1)
startFirst (e2)
startFirst (e3)
startSecond(e1)
startSecond(e2)
startSecond(e3)
startThree (e1)
startThree (e2)
startThree (e3)
startFour&processComplete (e1)
startFour&processComplete (e2)
startFour&processComplete (e3)