DanLevy.net

Quiz: 9 JavaScript‑Promise‑Fragen

Versprechen nie wieder fallen lassen!

Hero image for Quiz: 9 JavaScript‑Promise‑Fragen

Kennst du JavaScript‑Promises?

  • Beweise deine JavaScript‑Skills! 🚀
  1. Hinweise prüfen (großer Button, untere Ecke).
  2. Probiere den Code in der Browser‑Konsole aus (Tastenkürzel F12 oder Suche) oder nutze repl.it*.
  3. Gerne kannst du mir auf Twitter @justsml schreiben. Ich freue mich auf dein Feedback!

👇 Löse die 9 Fragen unten 👇

Wie lautet die Ausgabe des folgenden Codes?

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

Wir erstellen ein Promise mit der Konstruktor‑Methode und lösen sofort einen Fehler über den reject‑Callback aus.

Dann funktionieren die .catch‑Handler ähnlich wie .addEventListener(event, callback) im DOM oder .on(event, callback) beim Event Emitter, wobei mehrere Handler‑Callbacks hinzugefügt werden können. Jeder wird mit denselben Argumenten aufgerufen.

Wie lautet die Ausgabe für den folgenden Code?

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

Wenn du den Promise‑Konstruktor verwendest, musst du entweder die resolve()‑ oder die reject()‑Callbacks aufrufen. Der Promise‑Konstruktor ignoriert den Rückgabewert des Executors, sodass die zusätzlich mit Promise.reject() erstellte Promise nicht an p angehängt wird. Die beiden Handler werden an p angehängt, das im Pending‑Zustand bleibt, während die zurückgegebene abgelehnte Promise vom Host‑Umfeld als unbehandelt gemeldet wird.

Wie lautet die Ausgabe des folgenden Codes?

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

Hinweis: .catchs können verwendet werden, um Fehler zu ignorieren (oder zu überschreiben), indem einfach ein regulärer Wert zurückgegeben wird.

Der erste Catch erfüllt das zurückgegebene Promise mit dem String. Dafür ist kein späteres .then nötig; der zweite Catch wird übersprungen, weil die Kette bereits erfüllt ist. Keiner der ausgeführten Handler gibt etwas aus.

Wie lautet die Ausgabe für den folgenden Code?

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

Hinweis: .thens geben Daten sequenziell weiter, vom return value zum nächsten .then(value => /* handle value */).

Ein return ist entscheidend, um einen Wert an den nächsten .then zu übergeben.

Wie lautet die Ausgabe des folgenden Codes?

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

Es gibt 2 console.log‑Aufrufe, die ausgeführt werden.

Wie lautet die Ausgabe für den folgenden Code?

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

Hinweis: .then-Aufrufe geben Daten sequenziell weiter, von return value zum nächsten .then(value => /* handle value */).

Ein return ist entscheidend, um einen Wert an den nächsten .then zu übergeben.

Wie lautet die Ausgabe des folgenden Codes?

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

Der erste .catch behandelt die Ablehnung, indem er einen String zurückgibt, ohne etwas auszugeben. Das nächste .then wirft Error('The fails!'), und der letzte .catch gibt nur dessen Nachricht aus: The fails!.

Annotierter Ablauf der Promise-Kette: erste Ablehnung behandeln, neuen Fehler werfen und dessen Nachricht ausgeben