Quiz: 9 domande sulle Promise in JavaScript
Non lasciare mai più una promessa in sospeso!

Conosci le Promise di JavaScript?
- Metti alla prova le tue abilità JavaScript! 🚀
- Cerca gli indizi (pulsante grande, angolo in basso).
- Prova il codice nella Console del tuo browser (prova la scorciatoia
F12o cercala) oppure usa repl.it*. - Sentiti libero di scrivermi su X @justsml. Mi farebbe piacere sapere cosa ne pensi!
👇 Completa le 9 domande qui sotto 👇
Quale sarà l’output del seguente codice?
var p = new Promise((resolve, reject) => { reject(Error('The Fails!'))})p.catch(error => console.log(error.message))p.catch(error => console.log(error.message))Creiamo una Promise usando il costruttore, attivando immediatamente un errore con la callback reject.
Poi i gestori .catch funzionano come .addEventListener(event, callback) del DOM o .on(event, callback) di Event Emitter, dove è possibile aggiungere più callback di gestione. Ognuna verrà chiamata con gli stessi argomenti.
Quale sarà l’output del seguente codice?
var p = new Promise((resolve, reject) => { return Promise.reject(Error('The Fails!'))})p.catch(error => console.log(error.message))p.catch(error => console.log(error.message))Quando si utilizza il costruttore Promise, è necessario invocare le callback resolve() o reject(). Il costruttore Promise ignora il valore di ritorno dell’esecutore, quindi la Promise aggiuntiva creata con Promise.reject() non è concatenata a p. I due handler sono attaccati a p, che rimane in sospeso, mentre la promise rifiutata restituita viene segnalata come non gestita dall’ambiente host.
Quale sarà l’output del seguente codice?
var p = new Promise((resolve, reject) => { reject(Error('The Fails!'))}).catch(error => console.log(error)).then(error => console.log(error))Ogni passaggio della catena riceve il valore restituito dal precedente. Un rifiuto salta i gestori di successo fino a un .catch. Il gestore recupera restituendo normalmente: anche restituire un oggetto Error risolve la Promise successiva con quell’oggetto. Lanciare un errore o restituire una Promise rifiutata mantiene invece il rifiuto. Se viene restituita una Promise, la catena ne adotta lo stato finale. Qui console.log restituisce undefined, che viene stampato dal .then.
Quale sarà l’output del seguente codice?
var p = new Promise((resolve, reject) => { reject(Error('The Fails!'))}).catch(error => console.log(error.message)).catch(error => console.log(error.message))Quando si concatenano i .catch, ognuno gestisce solo gli errori lanciati nei precedenti passaggi .then o .catch. In questo esempio il primo .catch restituisce il console.log che potrebbe essere accessibile solo aggiungendo un .then() dopo entrambi i .catch.
Quale sarà l’output del seguente codice?
new Promise((resolve, reject) => { resolve('Success!') }) .then(() => { throw Error('Oh noes!') }) .catch(error => { return "actually, that worked" }) .catch(error => console.log(error.message))Il primo .catch recupera dall’errore e risolve la propria Promise con la stringa restituita. Non serve un .then successivo perché il recupero avvenga: il secondo .catch viene saltato perché la catena è risolta. Nessuno dei gestori eseguiti stampa un valore.
Quale sarà l’output del seguente codice?
Promise.resolve('Success!') .then(data => { return data.toUpperCase() }) .then(data => { console.log(data) })Suggerimento: I .then passano i dati in sequenza, dal return value al successivo .then(value => /* handle value */).
Un return è fondamentale per passare un valore al successivo .then.
Quale sarà l’output del seguente codice?
Promise.resolve('Success!') .then(data => { return data.toUpperCase() }) .then(data => { console.log(data) return data }) .then(console.log)Ci sono 2 chiamate a console.log che verranno eseguite.
Quale sarà l’output del seguente codice?
Promise.resolve('Success!') .then(data => { data.toUpperCase() }) .then(data => { console.log(data) })Suggerimento: I .then passano i dati in sequenza, dal return value al successivo .then(value => /* handle value */).
Un return è fondamentale per passare un valore al .then successivo.
Quale sarà l’output del seguente codice?
Promise.resolve('Success!') .then(() => { throw Error('Oh noes!') }) .catch(error => { return 'actually, that worked' }) .then(data => { throw Error('The fails!') }) .catch(error => console.log(error.message))Il primo .catch recupera senza stampare nulla. Il .then successivo lancia Error('The fails!'); solo l’ultimo .catch stampa il messaggio The fails!.
