DanLevy.net

Quiz: 9 JavaScript‑Promise‑Fragen

Versprechen nie wieder fallen lassen!

Hero image for Quiz: 9 JavaScript‑Promise‑Fragen

Kennst du JavaScript‑Promises?

  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.

Dieser Trick funktioniert nur, wenn ein nachfolgendes .then den Wert empfängt.

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

annotated-code/question-9-4.webp