Futuros - mapa vs plano
He leído los documentos sobremap
yflatMap
y entiendo queflatMap
se utiliza para una operación que acepta unFuture
parámetro y devuelve otroFuture
. Lo que no entiendo completamente es por qué querría hacer esto. Toma este ejemplo:
Entiendo que me gustaría usar un futuro para descargar el archivo, pero tengo dos opciones para volver a procesarlo:
val downloadFuture = Future { downloadFile }
val processFuture = downloadFuture map { processFile }
processFuture onSuccess { case r => renderResult(r) }
o
val downloadFuture = Future { // download the file }
val processFuture = downloadFuture flatMap { Future { processFile } }
processFuture onSuccess { case r => renderResult(r) }
Al agregar sentencias de depuración (Thread.currentThread().getId
) Veo que en ambos casos descarga,process
yrender
ocurrir en el mismo hilo (usandoExecutionContext.Implicits.global
)
UsaríaflatMap
simplemente para desacoplardownloadFile
yprocessFile
y asegurar queprocessFile
siempre corre en unFuture
incluso si no fue mapeado desdedownloadFile
?