Introduzione alle Promise
Le Promise di JavaScript sono divertenti!
Promises… Qual è il loro ruolo?
Ogni volta che esegui del codice, ci sono 2 possibili esiti: successo o fallimento.
Se quel codice è di natura asincrona, può essere più difficile fare affidamento sul risultato.
Promises offrono un modo pratico per gestire questa situazione.
+--Promise---+ | | | <-either-> | | | <-------+ +--------> |Failure? Success?| | | v v (Rejected) (Resolved)Nota a margine: sebbene le Promise dovrebbero risolversi o essere rifiutate, potrebbero non fare nessuno dei due. Questo può far bloccare le applicazioni e risultare molto difficile da diagnosticare.
Da dove provengono le Promise?
Molte volte non sarà necessario creare una promise manualmente. Le API native come fetch e le librerie popolari come axios restituiscono già delle Promise.
Tuttavia, se devi creare una promise, ci sono 2 modalità per farlo:
Creare Promise #1/2:
Il modo più semplice per creare una Promise è utilizzare il metodo di supporto: Promise.resolve().
Puoi avvolgere (o “convertire”) qualsiasi valore in una Promise usando Promise.resolve(value).
// Senza Promise:function add10(num) { return num + 10}
// Con Promise:function add10Promised(num) { return Promise.resolve(num + 10)}
console.log(add10(10)) //=> 20
add10Promised(10) .then(x => console.log(x)) //=> 20Creare Promise #2/2:
Un metodo più flessibile: usare il costruttore Promise.
new Promise(callback) accetta una funzione callback con la seguente interfaccia:
new Promise(function(resolve, reject) { // Gli argomenti `resolve` e `reject` sono entrambi funzioni. // typeof resolve === 'function' // typeof reject === 'function'
// `resolve(result)` deve essere chiamato quando la promise è soddisfatta // `reject(Error)` deve essere chiamato se la promise viene rifiutata})API delle Promise
L’API delle Promise è in realtà composta da un numero ridotto di metodi.
2 funzioni di istanza e 4 funzioni statiche/di utilità.
Metodi di istanza della Promise
Accedere ai valori di una promise non funzionerà con i trucchi abituali (ad es. console.log(promise)).
Tutte le Promise restituiscono o un successo (tramite .then(fn)) o un fallimento (tramite .catch(fn)).
Metodi di utilità delle Promise
Promise.resolve(value)– Converte qualsiasi valore in una PromisePromise.reject(Error)– Crea una Promise di fallimento, attiva i successivi.catch()Promise.all([...promises])– Attende che tutte le Promise in un array siano completatePromise.race([...promises])– Si risolve non appena la prima Promise si risolve