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?

  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))

Suggerimento: I .catch possono essere usati per ignorare (o sovrascrivere) gli errori semplicemente restituendo un valore regolare.

Questo trucco funziona solo quando c’è un successivo .then per ricevere il 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))

annotated-code/question-9-4.webp