DanLevy.net

Quiz : 9 questions sur les Promises JavaScript

Ne laissez plus jamais tomber une promesse.

Hero image for Quiz : 9 questions sur les Promises JavaScript

Connaissez‑vous les Promesses JavaScript ?

  • Prouvez votre maîtrise du JavaScript ! 🚀
  1. Vérifiez les indices (gros bouton, coin inférieur).
  2. Essayez le code dans la console de votre navigateur (raccourci F12 ou cherchez‑le) ou utilisez repl.it*.
  3. N’hésitez pas à me tweeter @justsml. J’aimerais connaître votre avis !

👇 Complétez les 9 questions ci‑dessous👇

Quel sera le résultat du code suivant ?

var p = new Promise((resolve, reject) => {
reject(Error('The Fails!'))
})
p.catch(error => console.log(error.message))
p.catch(error => console.log(error.message))

Nous créons une Promise avec le constructeur, déclenchant immédiatement une erreur via le callback reject.

Ensuite, les gestionnaires .catch fonctionnent comme .addEventListener(event, callback) du DOM ou .on(event, callback) d’Event Emitter, où plusieurs callbacks de gestionnaire peuvent être ajoutés. Chaque callback sera appelé avec les mêmes arguments.

Quel sera le résultat du code suivant ?

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

Lors de l’utilisation du constructeur Promise, vous devez appeler l’un des callbacks resolve() ou reject(). Le constructeur Promise ignore la valeur de retour de l’exécuteur, ainsi la Promise supplémentaire créée avec Promise.reject() n’est pas chaînée à p. Les deux gestionnaires sont attachés à p, qui reste en attente, tandis que la promesse rejetée retournée est signalée comme non gérée par l’environnement d’exécution.

Quel sera le résultat du code suivant ?

new Promise((resolve, reject) => {
resolve('Success!')
})
.then(() => {
throw Error('Oh noes!')
})
.catch(error => {
return "actually, that worked"
})
.catch(error => console.log(error.message))

Indice : Les .catch peuvent être utilisés pour ignorer (ou remplacer) les erreurs simplement en renvoyant une valeur ordinaire.

Le premier catch rétablit la chaîne et accomplit sa promesse avec la chaîne renvoyée. Aucun .then ultérieur n’est nécessaire ; le deuxième catch est ignoré puisque la promesse est accomplie. Aucun gestionnaire exécuté n’affiche de valeur.

Quel sera le résultat pour le code suivant ?

Promise.resolve('Success!')
.then(data => {
return data.toUpperCase()
})
.then(data => {
console.log(data)
})

Indice : les .then transmettent les données séquentiellement, du return value au prochain .then(value => /* handle value */).

Un return est essentiel pour passer une valeur au .then suivant.

Quel sera le résultat du code suivant ?

Promise.resolve('Success!')
.then(data => {
return data.toUpperCase()
})
.then(data => {
console.log(data)
return data
})
.then(console.log)

Il y a 2 appels à console.log qui seront exécutés.

Quel sera le résultat du code suivant ?

Promise.resolve('Success!')
.then(data => {
data.toUpperCase()
})
.then(data => {
console.log(data)
})

Indice : les .then transmettent les données séquentiellement, du return value au prochain .then(value => /* handle value */).

Un return est essentiel pour passer une valeur au .then suivant.

Quel sera le résultat du code suivant ?

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

Le premier .catch rétablit la chaîne en renvoyant une chaîne de caractères, sans rien afficher. Le .then suivant lève Error('The fails!'), puis le dernier .catch affiche uniquement son message : The fails!.

Code annoté : le dernier gestionnaire catch affiche le message de la seconde erreur