Ho un'applicazione Playframework scritta in Scala. Come ci si potrebbe aspettare, la sua funzione primaria è rispondere alle richieste degli utenti. Flusso di richiesta tipico:
- Analizza l'input e capisce cosa l'utente vuole che noi facciamo
- Raccogliere risorse esterne da db, AWS e così via (chiamate IO asincrone relativamente lente).
- Quando ritornano le chiamate IO, esegui una serie di funzioni (alcune delle quali di lunga durata, alcune di loro no), che fanno tutto ciò che l'utente ha richiesto, producendo in ultima analisi un output.
- Traduci l'output in una risposta HTTP e restituiscilo all'utente.
Quali sono i lati negativi di avere sempre importanti funzioni di ritorno Future [SomeResult], anche quando la funzione non esegue lavori di lunga durata? (In questi casi utilizzeremmo Future.successful o equivalente per elevare il valore in un Future.)
Un lato positivo è che semplifica la composizione di tutto + otteniamo il piacevole zucchero sintattico per la comprensione.
Uno svantaggio che posso vedere è che le firme delle funzioni stanno "mentendo" - suggeriscono che la funzione esegue un'operazione asincrona, ma in molti casi non lo fa. Ciò significa che dovresti effettivamente guardare la funzione per vedere cosa sta succedendo.