DanLevy.net

Quiz: 9 domande sulle Promise in JavaScript

Non lasciare mai più una promessa in sospeso!

Hero image for Quiz: 9 domande sulle Promise in JavaScript

Conosci le Promise di JavaScript?

  • Metti alla prova le tue abilità JavaScript! 🚀
  1. Cerca gli indizi (pulsante grande, angolo in basso).
  2. Prova il codice nella Console del tuo browser (prova la scorciatoia F12 o cercala) oppure usa repl.it*.
  3. 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?

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!.

Diagramma della catena di Promise, spiegata nel testo sopra