Lezioni del modulo (1/4)
Promise: cosa sono
Una Promise è un valore che rappresenta il risultato di un'operazione che terminerà in futuro. Può essere in tre stati:
- pending — l'operazione è ancora in corso
- fulfilled — è terminata con successo, c'è un valore
- rejected — è fallita, c'è un errore
Una volta che esce dallo stato pending, è "decisa" per sempre.
Creare una Promise risolta
I due modi più comuni — non creerai quasi mai una Promise "a mano" col costruttore:
const p1 = Promise.resolve(42);
const p2 = Promise.reject(new Error('oops'));Leggere il risultato: .then / .catch
Promise.resolve(10).then((v) => {
console.log(v); // 10
});
Promise.reject(new Error('no')).catch((e) => {
console.log(e.message); // 'no'
});.then riceve una funzione che viene chiamata con il valore risolto.
.catch riceve una funzione chiamata con l'errore in caso di rejection.
Concatenare
Ogni .then restituisce a sua volta una Promise: puoi concatenarli per
trasformare il valore passo dopo passo.
Promise.resolve(5)
.then((n) => n * 2)
.then((n) => n + 1)
.then((n) => console.log(n)); // 11Se uno qualunque dei .then lancia (o ritorna una Promise che fallisce),
salta al primo .catch successivo.
Costruttore (raro)
const p = new Promise((resolve, reject) => {
if (Math.random() > 0.5) resolve('ok');
else reject(new Error('no'));
});Lo userai solo quando devi "promisificare" qualcosa che usa callback (es. vecchie API DOM o setTimeout).
Prova tu
Definisci `promisedVersion(n)` che, dato un numero, ritorna una Promise risolta col doppio di n.
Mostra suggerimento
return Promise.resolve(n * 2)
Soluzione disponibile dopo 3 tentativi
Esercizio di ripasso
Definisci `incrementThree(p)` che riceve una Promise di numero e ritorna una Promise del numero + 3. Usa una catena .then.
Mostra suggerimento
p.then((n) => n + 3)
Soluzione disponibile dopo 3 tentativi