SlideShare ist ein Scribd-Unternehmen logo
1 von 32
Template designed by
Programmazione asincrona in
Javascript
Giorgio Di Nardo
g.dinardo@live.com
@akelitz
http://blogs.ugidotnet.org/akelitz/
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
Programmazione asincrona e Callback hell
Promises
Demo (Callback, jQuery, Q e ES6)
agenda agile
Programmazione asincrona e
Callback hell
La programmazione sincrona è semplice e funziona, ma…
Blocco del thread!
Le callback risolvono il problema del blocco del thread, ma…
In una callback non ci sono return
Nessuno può ricevere questo valore
In una callback non ci sono throw
Nessuno può intercettare questa eccezione
Le callback non offrono alcuna garanzia
… tranne quella della Pyramid of Doom
Questa è una via senza ritorno
Tranquilli, le cose possono sempre peggiorare
A livello di responsabilità come siamo messi?
Dalla padella nella brace…
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
«Lasciati sedurre
dal lato oscuro
delle callback»
Promises
Una Promise è un oggetto che
rappresenta un valore che potrebbe
non essere ancora disponibile, ma
che lo sarà prima o poi nel futuro.
Con le Promise invertiamo la catena
di responsabilità: invece di ricevere
una funzione da chiamare,
restituiamo un oggetto che
notificherà il completamento.
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.
Specifiche Promises/A+
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)
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)
Stati di una Promise
Pending
Fulfilled
value
Rejected
reason
demo
Callback, jQuery, Q & ES6
Firma del metodo più leggibile
Semantica uniforme tra return e error
Composizione semplificata
Sempre asincrona
Propagazione degli errori
Vantaggi delle Promise
«Perché non me
l’hai detto Ben!»
Ogni then() è un ramo indipendente
La then() deve propagare il risultato
Non stampa nulla
Le eccezioni si propagano in avanti e non all’indietro
And the winner is…
Le eccezioni devono essere propagate esplicitamente
And the winner is…
Le Promise non vengono mai risolte immediatamente
È ancora 0
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

Weitere ähnliche Inhalte

Mehr von DotNetCampus

CONTINUOUS INTEGRATION CON SQL SERVER
CONTINUOUS INTEGRATION CON SQL SERVERCONTINUOUS INTEGRATION CON SQL SERVER
CONTINUOUS INTEGRATION CON SQL SERVERDotNetCampus
 
PREDICT THE FUTURE , MACHINE LEARNING & BIG DATA
PREDICT THE FUTURE , MACHINE LEARNING & BIG DATAPREDICT THE FUTURE , MACHINE LEARNING & BIG DATA
PREDICT THE FUTURE , MACHINE LEARNING & BIG DATADotNetCampus
 
DESKTOP AND CLIENT VIRTUALIZATION: NEW WORKSTYLES WITH MICROSOFT VDI
DESKTOP AND CLIENT VIRTUALIZATION: NEW WORKSTYLES WITH MICROSOFT VDIDESKTOP AND CLIENT VIRTUALIZATION: NEW WORKSTYLES WITH MICROSOFT VDI
DESKTOP AND CLIENT VIRTUALIZATION: NEW WORKSTYLES WITH MICROSOFT VDIDotNetCampus
 
FROM ON-PREMISE TO THE HYBRID CLOUD WITH MICROSOFT AZURE
FROM ON-PREMISE TO THE HYBRID CLOUD WITH MICROSOFT AZUREFROM ON-PREMISE TO THE HYBRID CLOUD WITH MICROSOFT AZURE
FROM ON-PREMISE TO THE HYBRID CLOUD WITH MICROSOFT AZUREDotNetCampus
 
SHAREPOINT 2016 - WHAT'S NEW
SHAREPOINT 2016 - WHAT'S NEWSHAREPOINT 2016 - WHAT'S NEW
SHAREPOINT 2016 - WHAT'S NEWDotNetCampus
 
COSTRUISCI IL TUO DEVICE
COSTRUISCI IL TUO DEVICECOSTRUISCI IL TUO DEVICE
COSTRUISCI IL TUO DEVICEDotNetCampus
 
SVILUPPARE PER MICROSOFT BAND
SVILUPPARE PER MICROSOFT BANDSVILUPPARE PER MICROSOFT BAND
SVILUPPARE PER MICROSOFT BANDDotNetCampus
 
INTERFACCE GRAFICHE CON UNITY3D 4.6: IL GIOCO NON BASTA!
INTERFACCE GRAFICHE CON UNITY3D 4.6: IL GIOCO NON BASTA!INTERFACCE GRAFICHE CON UNITY3D 4.6: IL GIOCO NON BASTA!
INTERFACCE GRAFICHE CON UNITY3D 4.6: IL GIOCO NON BASTA!DotNetCampus
 
WINDOWS PHONE APPS IN C++
WINDOWS PHONE APPS IN C++WINDOWS PHONE APPS IN C++
WINDOWS PHONE APPS IN C++DotNetCampus
 
AZURE NOTIFICATION HUB
AZURE NOTIFICATION HUBAZURE NOTIFICATION HUB
AZURE NOTIFICATION HUBDotNetCampus
 
SFRUTTARE I MICROSOFT AZURE MOBILE SERVICES CON XAMARIN.FORMS
SFRUTTARE I MICROSOFT AZURE MOBILE SERVICES CON XAMARIN.FORMSSFRUTTARE I MICROSOFT AZURE MOBILE SERVICES CON XAMARIN.FORMS
SFRUTTARE I MICROSOFT AZURE MOBILE SERVICES CON XAMARIN.FORMSDotNetCampus
 
UNIVERSAL APP IN TUTTE LE SALSE: PHONE, TABLET, PC, XBOX E IOT
UNIVERSAL APP IN TUTTE LE SALSE: PHONE, TABLET, PC, XBOX E IOTUNIVERSAL APP IN TUTTE LE SALSE: PHONE, TABLET, PC, XBOX E IOT
UNIVERSAL APP IN TUTTE LE SALSE: PHONE, TABLET, PC, XBOX E IOTDotNetCampus
 
SFRUTTARE CORTANA E LE SPEECH API NELLE NOSTRE APP
SFRUTTARE CORTANA E LE SPEECH API NELLE NOSTRE APPSFRUTTARE CORTANA E LE SPEECH API NELLE NOSTRE APP
SFRUTTARE CORTANA E LE SPEECH API NELLE NOSTRE APPDotNetCampus
 
APPSTUDIO: DA ZERO ALLO STORE IN 50 MINUTI!
APPSTUDIO: DA ZERO ALLO STORE IN 50 MINUTI!APPSTUDIO: DA ZERO ALLO STORE IN 50 MINUTI!
APPSTUDIO: DA ZERO ALLO STORE IN 50 MINUTI!DotNetCampus
 
SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!
SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!
SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!DotNetCampus
 
SVILUPPARE E GESTIRE ARCHITETTURE A MICROSERVIZI SU AZURE
SVILUPPARE E GESTIRE ARCHITETTURE A MICROSERVIZI SU AZURESVILUPPARE E GESTIRE ARCHITETTURE A MICROSERVIZI SU AZURE
SVILUPPARE E GESTIRE ARCHITETTURE A MICROSERVIZI SU AZUREDotNetCampus
 
AZURE WEBSITE DEEPDIVE
AZURE WEBSITE DEEPDIVEAZURE WEBSITE DEEPDIVE
AZURE WEBSITE DEEPDIVEDotNetCampus
 
INTERNET OF THINGS & AZURE
INTERNET OF THINGS & AZUREINTERNET OF THINGS & AZURE
INTERNET OF THINGS & AZUREDotNetCampus
 
JAVASCRIPT TASK AUTOMATION
JAVASCRIPT TASK AUTOMATIONJAVASCRIPT TASK AUTOMATION
JAVASCRIPT TASK AUTOMATIONDotNetCampus
 

Mehr von DotNetCampus (20)

CONTINUOUS INTEGRATION CON SQL SERVER
CONTINUOUS INTEGRATION CON SQL SERVERCONTINUOUS INTEGRATION CON SQL SERVER
CONTINUOUS INTEGRATION CON SQL SERVER
 
PREDICT THE FUTURE , MACHINE LEARNING & BIG DATA
PREDICT THE FUTURE , MACHINE LEARNING & BIG DATAPREDICT THE FUTURE , MACHINE LEARNING & BIG DATA
PREDICT THE FUTURE , MACHINE LEARNING & BIG DATA
 
DESKTOP AND CLIENT VIRTUALIZATION: NEW WORKSTYLES WITH MICROSOFT VDI
DESKTOP AND CLIENT VIRTUALIZATION: NEW WORKSTYLES WITH MICROSOFT VDIDESKTOP AND CLIENT VIRTUALIZATION: NEW WORKSTYLES WITH MICROSOFT VDI
DESKTOP AND CLIENT VIRTUALIZATION: NEW WORKSTYLES WITH MICROSOFT VDI
 
FROM ON-PREMISE TO THE HYBRID CLOUD WITH MICROSOFT AZURE
FROM ON-PREMISE TO THE HYBRID CLOUD WITH MICROSOFT AZUREFROM ON-PREMISE TO THE HYBRID CLOUD WITH MICROSOFT AZURE
FROM ON-PREMISE TO THE HYBRID CLOUD WITH MICROSOFT AZURE
 
SHAREPOINT 2016 - WHAT'S NEW
SHAREPOINT 2016 - WHAT'S NEWSHAREPOINT 2016 - WHAT'S NEW
SHAREPOINT 2016 - WHAT'S NEW
 
COSTRUISCI IL TUO DEVICE
COSTRUISCI IL TUO DEVICECOSTRUISCI IL TUO DEVICE
COSTRUISCI IL TUO DEVICE
 
SVILUPPARE PER MICROSOFT BAND
SVILUPPARE PER MICROSOFT BANDSVILUPPARE PER MICROSOFT BAND
SVILUPPARE PER MICROSOFT BAND
 
INTERFACCE GRAFICHE CON UNITY3D 4.6: IL GIOCO NON BASTA!
INTERFACCE GRAFICHE CON UNITY3D 4.6: IL GIOCO NON BASTA!INTERFACCE GRAFICHE CON UNITY3D 4.6: IL GIOCO NON BASTA!
INTERFACCE GRAFICHE CON UNITY3D 4.6: IL GIOCO NON BASTA!
 
WINDOWS PHONE APPS IN C++
WINDOWS PHONE APPS IN C++WINDOWS PHONE APPS IN C++
WINDOWS PHONE APPS IN C++
 
AZURE NOTIFICATION HUB
AZURE NOTIFICATION HUBAZURE NOTIFICATION HUB
AZURE NOTIFICATION HUB
 
SFRUTTARE I MICROSOFT AZURE MOBILE SERVICES CON XAMARIN.FORMS
SFRUTTARE I MICROSOFT AZURE MOBILE SERVICES CON XAMARIN.FORMSSFRUTTARE I MICROSOFT AZURE MOBILE SERVICES CON XAMARIN.FORMS
SFRUTTARE I MICROSOFT AZURE MOBILE SERVICES CON XAMARIN.FORMS
 
INTRO TO XAMARIN
INTRO TO XAMARININTRO TO XAMARIN
INTRO TO XAMARIN
 
UNIVERSAL APP IN TUTTE LE SALSE: PHONE, TABLET, PC, XBOX E IOT
UNIVERSAL APP IN TUTTE LE SALSE: PHONE, TABLET, PC, XBOX E IOTUNIVERSAL APP IN TUTTE LE SALSE: PHONE, TABLET, PC, XBOX E IOT
UNIVERSAL APP IN TUTTE LE SALSE: PHONE, TABLET, PC, XBOX E IOT
 
SFRUTTARE CORTANA E LE SPEECH API NELLE NOSTRE APP
SFRUTTARE CORTANA E LE SPEECH API NELLE NOSTRE APPSFRUTTARE CORTANA E LE SPEECH API NELLE NOSTRE APP
SFRUTTARE CORTANA E LE SPEECH API NELLE NOSTRE APP
 
APPSTUDIO: DA ZERO ALLO STORE IN 50 MINUTI!
APPSTUDIO: DA ZERO ALLO STORE IN 50 MINUTI!APPSTUDIO: DA ZERO ALLO STORE IN 50 MINUTI!
APPSTUDIO: DA ZERO ALLO STORE IN 50 MINUTI!
 
SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!
SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!
SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!
 
SVILUPPARE E GESTIRE ARCHITETTURE A MICROSERVIZI SU AZURE
SVILUPPARE E GESTIRE ARCHITETTURE A MICROSERVIZI SU AZURESVILUPPARE E GESTIRE ARCHITETTURE A MICROSERVIZI SU AZURE
SVILUPPARE E GESTIRE ARCHITETTURE A MICROSERVIZI SU AZURE
 
AZURE WEBSITE DEEPDIVE
AZURE WEBSITE DEEPDIVEAZURE WEBSITE DEEPDIVE
AZURE WEBSITE DEEPDIVE
 
INTERNET OF THINGS & AZURE
INTERNET OF THINGS & AZUREINTERNET OF THINGS & AZURE
INTERNET OF THINGS & AZURE
 
JAVASCRIPT TASK AUTOMATION
JAVASCRIPT TASK AUTOMATIONJAVASCRIPT TASK AUTOMATION
JAVASCRIPT TASK AUTOMATION
 

Kürzlich hochgeladen

Tosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptxTosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptxlorenzodemidio01
 
Descrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptxDescrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptxtecongo2007
 
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptxLorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptxlorenzodemidio01
 
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptxLorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptxlorenzodemidio01
 
Quadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceoQuadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceoyanmeng831
 
Aristotele, vita e opere e fisica...pptx
Aristotele, vita e opere e fisica...pptxAristotele, vita e opere e fisica...pptx
Aristotele, vita e opere e fisica...pptxtecongo2007
 
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptxScienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptxlorenzodemidio01
 
Confronto tra Sparta e Atene classiche.ppt
Confronto tra Sparta e Atene classiche.pptConfronto tra Sparta e Atene classiche.ppt
Confronto tra Sparta e Atene classiche.pptcarlottagalassi
 
LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................giorgiadeascaniis59
 
Scrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibileScrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibileNicola Rabbi
 
Presentazioni Efficaci e lezioni di Educazione Civica
Presentazioni Efficaci e lezioni di Educazione CivicaPresentazioni Efficaci e lezioni di Educazione Civica
Presentazioni Efficaci e lezioni di Educazione CivicaSalvatore Cianciabella
 
case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....giorgiadeascaniis59
 
Lorenzo D'Emidio_Vita e opere di Aristotele.pptx
Lorenzo D'Emidio_Vita e opere di Aristotele.pptxLorenzo D'Emidio_Vita e opere di Aristotele.pptx
Lorenzo D'Emidio_Vita e opere di Aristotele.pptxlorenzodemidio01
 
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptxNicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptxlorenzodemidio01
 
descrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptxdescrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptxtecongo2007
 
Lorenzo D'Emidio_Francesco Petrarca.pptx
Lorenzo D'Emidio_Francesco Petrarca.pptxLorenzo D'Emidio_Francesco Petrarca.pptx
Lorenzo D'Emidio_Francesco Petrarca.pptxlorenzodemidio01
 
discorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptxdiscorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptxtecongo2007
 
Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.camillaorlando17
 
Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................giorgiadeascaniis59
 

Kürzlich hochgeladen (19)

Tosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptxTosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptx
 
Descrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptxDescrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptx
 
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptxLorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
 
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptxLorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
 
Quadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceoQuadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceo
 
Aristotele, vita e opere e fisica...pptx
Aristotele, vita e opere e fisica...pptxAristotele, vita e opere e fisica...pptx
Aristotele, vita e opere e fisica...pptx
 
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptxScienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
 
Confronto tra Sparta e Atene classiche.ppt
Confronto tra Sparta e Atene classiche.pptConfronto tra Sparta e Atene classiche.ppt
Confronto tra Sparta e Atene classiche.ppt
 
LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................
 
Scrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibileScrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibile
 
Presentazioni Efficaci e lezioni di Educazione Civica
Presentazioni Efficaci e lezioni di Educazione CivicaPresentazioni Efficaci e lezioni di Educazione Civica
Presentazioni Efficaci e lezioni di Educazione Civica
 
case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....
 
Lorenzo D'Emidio_Vita e opere di Aristotele.pptx
Lorenzo D'Emidio_Vita e opere di Aristotele.pptxLorenzo D'Emidio_Vita e opere di Aristotele.pptx
Lorenzo D'Emidio_Vita e opere di Aristotele.pptx
 
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptxNicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
 
descrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptxdescrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptx
 
Lorenzo D'Emidio_Francesco Petrarca.pptx
Lorenzo D'Emidio_Francesco Petrarca.pptxLorenzo D'Emidio_Francesco Petrarca.pptx
Lorenzo D'Emidio_Francesco Petrarca.pptx
 
discorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptxdiscorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptx
 
Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.
 
Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................
 

Programmazione asincrona in java script

  • 1. Template designed by Programmazione asincrona in Javascript Giorgio Di Nardo g.dinardo@live.com @akelitz http://blogs.ugidotnet.org/akelitz/
  • 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. Programmazione asincrona e Callback hell Promises Demo (Callback, jQuery, Q e ES6) agenda agile
  • 5. La programmazione sincrona è semplice e funziona, ma… Blocco del thread!
  • 6. Le callback risolvono il problema del blocco del thread, ma…
  • 7. In una callback non ci sono return Nessuno può ricevere questo valore
  • 8. In una callback non ci sono throw Nessuno può intercettare questa eccezione
  • 9. Le callback non offrono alcuna garanzia
  • 10. … tranne quella della Pyramid of Doom Questa è una via senza ritorno
  • 11. Tranquilli, le cose possono sempre peggiorare
  • 12. A livello di responsabilità come siamo messi?
  • 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. «Lasciati sedurre dal lato oscuro delle callback»
  • 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. Con le Promise invertiamo la catena di responsabilità: invece di ricevere una funzione da chiamare, restituiamo un oggetto che notificherà il completamento.
  • 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.
  • 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. 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. Stati di una Promise Pending Fulfilled value Rejected reason
  • 25. Firma del metodo più leggibile Semantica uniforme tra return e error Composizione semplificata Sempre asincrona Propagazione degli errori Vantaggi delle Promise
  • 26. «Perché non me l’hai detto Ben!»
  • 27. Ogni then() è un ramo indipendente
  • 28. La then() deve propagare il risultato Non stampa nulla
  • 29. Le eccezioni si propagano in avanti e non all’indietro And the winner is…
  • 30. Le eccezioni devono essere propagate esplicitamente And the winner is…
  • 31. Le Promise non vengono mai risolte immediatamente È ancora 0
  • 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