DanLevy.net

Introduzione alle Promise

Le Promise di JavaScript sono divertenti!

Hero image for Introduzione alle Promise

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)) //=> 20

Creare 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