JavaScript · Senior · Frage 4 von 75
Warum wird das Promise unten nie abgelehnt?
new Promise((resolve, reject) => {
setTimeout(() => { throw new Error("boom"); }, 0);
});- 1
setTimeoutin einem Promise schluckt automatisch jede Exception - 2Das Promise wird abgelehnt, aber erst nach einem expliziten Aufruf von
.catch() - 3Die Exception im Timer wird außerhalb des Executors geworfen und ist nicht ans Promise gebunden
Antwort zeigen
Richtige Antwort: Die Exception im Timer wird außerhalb des Executors geworfen und ist nicht ans Promise gebunden
Erklärung
Nur synchrone Exceptions im Executor werden automatisch zu Ablehnungen. Ein Fehler in einem Timer-Callback passiert später, in einer eigenen Aufgabe: Er wird zu einem globalen unbehandelten Fehler, und das Promise bleibt für immer pending. Man muss reject explizit aufrufen.