Successfully reported this slideshow.
Your SlideShare is downloading. ×

Programmazione asincrona in java script

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Loading in …3
×

Check these out next

1 of 32 Ad

Programmazione asincrona in java script

Download to read offline

In un mondo "mobile-first cloud-first", in cui la qualità della connessione non può essere un assunto, per realizzare applicazioni web responsive è fondamentale liberare il thread della UI dal carico della risoluzione delle chiamate al back-end. Il paradigma asincrono consente di raggiungere questo risultato sia con l'approccio basato su callback, che attraverso il concetto di Promise, potendo oltretutto usufruire dell'utile supporto di librerie ad hoc come Q o delle nuove specifiche ES6.

In un mondo "mobile-first cloud-first", in cui la qualità della connessione non può essere un assunto, per realizzare applicazioni web responsive è fondamentale liberare il thread della UI dal carico della risoluzione delle chiamate al back-end. Il paradigma asincrono consente di raggiungere questo risultato sia con l'approccio basato su callback, che attraverso il concetto di Promise, potendo oltretutto usufruire dell'utile supporto di librerie ad hoc come Q o delle nuove specifiche ES6.

Advertisement
Advertisement

More Related Content

More from DotNetCampus (20)

Recently uploaded (20)

Advertisement

Programmazione asincrona in java script

  1. 1. Template designed by Programmazione asincrona in Javascript Giorgio Di Nardo g.dinardo@live.com @akelitz http://blogs.ugidotnet.org/akelitz/
  2. 2. GIORGIO DI NARDO Lavoro presso Proge-software come Software Architect Sono tra i fondatori di DomusDotNet Mi interesso di Web Application e ALM chi sono
  3. 3. Programmazione asincrona e Callback hell Promises Demo (Callback, jQuery, Q e ES6) agenda agile
  4. 4. Programmazione asincrona e Callback hell
  5. 5. La programmazione sincrona è semplice e funziona, ma… Blocco del thread!
  6. 6. Le callback risolvono il problema del blocco del thread, ma…
  7. 7. In una callback non ci sono return Nessuno può ricevere questo valore
  8. 8. In una callback non ci sono throw Nessuno può intercettare questa eccezione
  9. 9. Le callback non offrono alcuna garanzia
  10. 10. … tranne quella della Pyramid of Doom Questa è una via senza ritorno
  11. 11. Tranquilli, le cose possono sempre peggiorare
  12. 12. A livello di responsabilità come siamo messi?
  13. 13. Dalla padella nella brace…
  14. 14. Diversa modalità di gestione valori di ritorno Nessuna possibilità di propagare le eccezioni Scarse garanzie di standardizzazione Difficoltà di lettura del codice Violazione del Single Responsability Principal Ricapitolando
  15. 15. «Lasciati sedurre dal lato oscuro delle callback»
  16. 16. Promises
  17. 17. Una Promise è un oggetto che rappresenta un valore che potrebbe non essere ancora disponibile, ma che lo sarà prima o poi nel futuro.
  18. 18. Con le Promise invertiamo la catena di responsabilità: invece di ricevere una funzione da chiamare, restituiamo un oggetto che notificherà il completamento.
  19. 19. Le Promise forniscono una solida astrazione per rappresentare lo stato di una chiamata asincrona e consentono di scrivere un flusso di operazioni basate su tale stato.
  20. 20. Specifiche Promises/A+
  21. 21. Una Promise deve fornire un metodo then() attraverso il quale sia possibile accedere al value o alla reason attuali o futuri. Il metodo then() accetta due argomenti, le callback che saranno chiamate rispettivamente quando la Promise viene risolta (passando in stato Fulfilled) o rifiutata (passando in stato Rejected) Ogni callback viene chiamata quando il value o la reason sono disponibili e in ogni caso sempre e solo una volta Value e reason sono immutabili Sintassi e garanzie della Promise (1)
  22. 22. Il metodo then() della Promise deve restituire una nuova Promise: • Se onFulfilled o onRejected ritornano un valore, allora la nuova promise deve essere risolta (Fulfilled) con quel valore • Se onFulfilled o onRejected lanciano un’eccezione, allora la nuova promise deve essere rifiutata (Rejected) con quella motivazione • Se la promise è stata risolta ma onFulfilled non è una funzione, allora la nuova promise deve essere risolta con lo stesso valore della prima • Se la promise è stata rifiutata ma onRejected non è una funzione, allora la nuova promise deve essere rifiutata con lo stesso valore della prima Sintassi e garanzie della Promise (2)
  23. 23. Stati di una Promise Pending Fulfilled value Rejected reason
  24. 24. demo Callback, jQuery, Q & ES6
  25. 25. Firma del metodo più leggibile Semantica uniforme tra return e error Composizione semplificata Sempre asincrona Propagazione degli errori Vantaggi delle Promise
  26. 26. «Perché non me l’hai detto Ben!»
  27. 27. Ogni then() è un ramo indipendente
  28. 28. La then() deve propagare il risultato Non stampa nulla
  29. 29. Le eccezioni si propagano in avanti e non all’indietro And the winner is…
  30. 30. Le eccezioni devono essere propagate esplicitamente And the winner is…
  31. 31. Le Promise non vengono mai risolte immediatamente È ancora 0
  32. 32. In JavaScript abbiamo un unico thread quindi non possiamo permetterci di bloccarlo La soluzione «semplice» è la programmazione asincrona usando le callback La difficoltà di leggere il codice, di propagare le eccezioni, di concatenare le chiamate, ci spinge a cercare soluzioni più robuste Le Promise sono la risposta a questi problemi Q è una libreria che supporta pienamente le specifiche Promises/A+ e consente di scrivere codice asincrono molto semplicemente in attesa di ES6 Recap

×