Sto scrivendo un'applicazione Scala utilizzando il driver ReactiveMongo. I metodi che accedono al db restituiscono sempre Future[T]
. I seguenti pezzi di codice sono equivalenti?Qual è la differenza tra onComplete e flatMap of Future?
(con onComplete
)
val results: Future[List[Tag]] = Tags.all.toList
results onComplete {
case Success(list) => //do something with list
case Failure(t) => //throw the error
}
(con flatMap
)
Tags.all.toList.flatMap(list => //do something with list)
Qual è la differenza?
Il flatMap non lancia il guasto ?? E lo flatMap
è un callback come onComplete
o attendere fino a quando l'istruzione Tags.all.toList
non viene completata?
È evidente dalla firma: allo stesso modo prova monad, 'flatMap' non riguarda i guasti. È ciò di cui tratta la monade: si passa qualsiasi errore intatto e si applicano le operazioni solo se non ci sono errori nella pipe. Solo alla fine ti consigliamo di cogliere entrambi gli errori e i successi –