Programmazione asincrona in java script

32
Template designed by Programmazione asincrona in Javascript Giorgio Di Nardo [email protected] @akelitz http://blogs.ugidotnet.org/akelitz/

Transcript of Programmazione asincrona in java script

Page 1: Programmazione asincrona in java script

Template designed by

Programmazione asincrona in Javascript

Giorgio Di [email protected]@akelitzhttp://blogs.ugidotnet.org/akelitz/

Page 2: Programmazione asincrona in java script

GIORGIO DI NARDOLavoro presso Proge-software come Software Architect

Sono tra i fondatori di DomusDotNet

Mi interesso di Web Application e ALM

chi sono

Page 3: Programmazione asincrona in java script

Programmazione asincrona e Callback hell

Promises

Demo (Callback, jQuery, Q e ES6)

agenda agile

Page 4: Programmazione asincrona in java script

Programmazione asincrona e Callback hell

Page 5: Programmazione asincrona in java script

La programmazione sincrona è semplice e funziona, ma…

Blocco del thread!

Page 6: Programmazione asincrona in java script

Le callback risolvono il problema del blocco del thread, ma…

Page 7: Programmazione asincrona in java script

In una callback non ci sono return

Nessuno può ricevere questo valore

Page 8: Programmazione asincrona in java script

In una callback non ci sono throw

Nessuno può intercettare questa eccezione

Page 9: Programmazione asincrona in java script

Le callback non offrono alcuna garanzia

Page 10: Programmazione asincrona in java script

… tranne quella della Pyramid of Doom

Questa è una via senza ritorno

Page 11: Programmazione asincrona in java script

Tranquilli, le cose possono sempre peggiorare

Page 12: Programmazione asincrona in java script

A livello di responsabilità come siamo messi?

Page 13: Programmazione asincrona in java script

Dalla padella nella brace…

Page 14: Programmazione asincrona in java script

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

Page 15: Programmazione asincrona in java script

«Lasciati sedurre dal lato oscuro

delle callback»

Page 16: Programmazione asincrona in java script

Promises

Page 17: Programmazione asincrona in java script

Una Promise è un oggetto che rappresenta un valore che

potrebbe non essere ancora disponibile, ma che lo sarà

prima o poi nel futuro.

Page 18: Programmazione asincrona in java script

Con le Promise invertiamo la catena di responsabilità:

invece di ricevere una funzione da chiamare, restituiamo un

oggetto che notificherà il completamento.

Page 19: Programmazione asincrona in java script

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.

Page 20: Programmazione asincrona in java script

Specifiche Promises/A+

Page 21: Programmazione asincrona in java script

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)

Page 22: Programmazione asincrona in java script

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)

Page 23: Programmazione asincrona in java script

Stati di una Promise

Pending

Fulfilled

value

Rejected

reason

Page 24: Programmazione asincrona in java script

dem

o Callback, jQuery, Q &

ES6

Page 25: Programmazione asincrona in java script

Firma del metodo più leggibile

Semantica uniforme tra return e error

Composizione semplificata

Sempre asincrona

Propagazione degli errori

Vantaggi delle Promise

Page 26: Programmazione asincrona in java script

«Perché non me l’hai detto

Ben!»

Page 27: Programmazione asincrona in java script

Ogni then() è un ramo indipendente

Page 28: Programmazione asincrona in java script

La then() deve propagare il risultato

Non stampa nulla

Page 29: Programmazione asincrona in java script

Le eccezioni si propagano in avanti e non all’indietro

And the winner is…

Page 30: Programmazione asincrona in java script

Le eccezioni devono essere propagate esplicitamente

And the winner is…

Page 31: Programmazione asincrona in java script

Le Promise non vengono mai risolte immediatamente

È ancora 0

Page 32: Programmazione asincrona in java script

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