SlideShare a Scribd company logo
1 of 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

More Related Content

More from 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
 

More from 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
 

Recently uploaded

Lo Schema Diapositiva con LibreOffice Impress
Lo Schema Diapositiva con LibreOffice ImpressLo Schema Diapositiva con LibreOffice Impress
Lo Schema Diapositiva con LibreOffice ImpressSalvatore Cianciabella
 
MyEdu Club: il magazine di MyEdu dedicato ai genitori
MyEdu Club: il magazine di MyEdu dedicato ai genitoriMyEdu Club: il magazine di MyEdu dedicato ai genitori
MyEdu Club: il magazine di MyEdu dedicato ai genitorimarketing983206
 
Santa Gemma Galgani, Fiore di Lucca, mistica italiana 1887-1903.pptx
Santa Gemma Galgani, Fiore di Lucca, mistica italiana 1887-1903.pptxSanta Gemma Galgani, Fiore di Lucca, mistica italiana 1887-1903.pptx
Santa Gemma Galgani, Fiore di Lucca, mistica italiana 1887-1903.pptxMartin M Flynn
 
Ostia antica da porta di Roma a porta d'Europa
Ostia antica da porta di Roma a porta d'EuropaOstia antica da porta di Roma a porta d'Europa
Ostia antica da porta di Roma a porta d'EuropaMarina Lo Blundo
 
No. Nessuno strumento automatico verifica o ripara l’accessibilità di un sito...
No. Nessuno strumento automatico verifica o ripara l’accessibilità di un sito...No. Nessuno strumento automatico verifica o ripara l’accessibilità di un sito...
No. Nessuno strumento automatico verifica o ripara l’accessibilità di un sito...Roberto Scano
 
TeccarelliLorenzo-Leformeallotropichedelcarbonio.pptx
TeccarelliLorenzo-Leformeallotropichedelcarbonio.pptxTeccarelliLorenzo-Leformeallotropichedelcarbonio.pptx
TeccarelliLorenzo-Leformeallotropichedelcarbonio.pptxteccarellilorenzo
 
a scuola di biblioVerifica: come utilizzare CHATBOT secondo UNESCO
a scuola di biblioVerifica: come utilizzare CHATBOT secondo UNESCOa scuola di biblioVerifica: come utilizzare CHATBOT secondo UNESCO
a scuola di biblioVerifica: come utilizzare CHATBOT secondo UNESCODamiano Orru
 
AccessibleEU: oggi per l’accessibilità di domani
AccessibleEU: oggi per l’accessibilità di domaniAccessibleEU: oggi per l’accessibilità di domani
AccessibleEU: oggi per l’accessibilità di domaniRoberto Scano
 
TeccarelliLorenzo-testoargomentativo.docx
TeccarelliLorenzo-testoargomentativo.docxTeccarelliLorenzo-testoargomentativo.docx
TeccarelliLorenzo-testoargomentativo.docxteccarellilorenzo
 
Amburgo la città più smart della Germania
Amburgo la città più smart della GermaniaAmburgo la città più smart della Germania
Amburgo la città più smart della Germaniasofiaganzaroli9
 
Ticonzero news 149.pdf, maggio 2024, content
Ticonzero news 149.pdf, maggio 2024, contentTiconzero news 149.pdf, maggio 2024, content
Ticonzero news 149.pdf, maggio 2024, contentPierLuigi Albini
 
Powerpoint tesi di laurea
Powerpoint tesi di laurea Powerpoint tesi di laurea
Powerpoint tesi di laurea Valentina Ottini
 

Recently uploaded (12)

Lo Schema Diapositiva con LibreOffice Impress
Lo Schema Diapositiva con LibreOffice ImpressLo Schema Diapositiva con LibreOffice Impress
Lo Schema Diapositiva con LibreOffice Impress
 
MyEdu Club: il magazine di MyEdu dedicato ai genitori
MyEdu Club: il magazine di MyEdu dedicato ai genitoriMyEdu Club: il magazine di MyEdu dedicato ai genitori
MyEdu Club: il magazine di MyEdu dedicato ai genitori
 
Santa Gemma Galgani, Fiore di Lucca, mistica italiana 1887-1903.pptx
Santa Gemma Galgani, Fiore di Lucca, mistica italiana 1887-1903.pptxSanta Gemma Galgani, Fiore di Lucca, mistica italiana 1887-1903.pptx
Santa Gemma Galgani, Fiore di Lucca, mistica italiana 1887-1903.pptx
 
Ostia antica da porta di Roma a porta d'Europa
Ostia antica da porta di Roma a porta d'EuropaOstia antica da porta di Roma a porta d'Europa
Ostia antica da porta di Roma a porta d'Europa
 
No. Nessuno strumento automatico verifica o ripara l’accessibilità di un sito...
No. Nessuno strumento automatico verifica o ripara l’accessibilità di un sito...No. Nessuno strumento automatico verifica o ripara l’accessibilità di un sito...
No. Nessuno strumento automatico verifica o ripara l’accessibilità di un sito...
 
TeccarelliLorenzo-Leformeallotropichedelcarbonio.pptx
TeccarelliLorenzo-Leformeallotropichedelcarbonio.pptxTeccarelliLorenzo-Leformeallotropichedelcarbonio.pptx
TeccarelliLorenzo-Leformeallotropichedelcarbonio.pptx
 
a scuola di biblioVerifica: come utilizzare CHATBOT secondo UNESCO
a scuola di biblioVerifica: come utilizzare CHATBOT secondo UNESCOa scuola di biblioVerifica: come utilizzare CHATBOT secondo UNESCO
a scuola di biblioVerifica: come utilizzare CHATBOT secondo UNESCO
 
AccessibleEU: oggi per l’accessibilità di domani
AccessibleEU: oggi per l’accessibilità di domaniAccessibleEU: oggi per l’accessibilità di domani
AccessibleEU: oggi per l’accessibilità di domani
 
TeccarelliLorenzo-testoargomentativo.docx
TeccarelliLorenzo-testoargomentativo.docxTeccarelliLorenzo-testoargomentativo.docx
TeccarelliLorenzo-testoargomentativo.docx
 
Amburgo la città più smart della Germania
Amburgo la città più smart della GermaniaAmburgo la città più smart della Germania
Amburgo la città più smart della Germania
 
Ticonzero news 149.pdf, maggio 2024, content
Ticonzero news 149.pdf, maggio 2024, contentTiconzero news 149.pdf, maggio 2024, content
Ticonzero news 149.pdf, maggio 2024, content
 
Powerpoint tesi di laurea
Powerpoint tesi di laurea Powerpoint tesi di laurea
Powerpoint tesi di laurea
 

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