JavaScript · Senior · Pytanie 4 z 75
Dlaczego poniższy promise nigdy nie zostanie odrzucony?
new Promise((resolve, reject) => {
setTimeout(() => { throw new Error("boom"); }, 0);
});- ✓Poprawna odpowiedź: Wyjątek w timerze jest rzucany poza executorem i nie jest powiązany z promise'em
- 2
setTimeoutwewnątrz promise'a automatycznie połyka wszelkie wyjątki - 3Promise zostanie odrzucony, ale dopiero po jawnym wywołaniu
.catch()
Wyjaśnienie
Tylko synchroniczne wyjątki w executorze automatycznie zamieniają się w odrzucenie. Błąd w callbacku timera następuje później, w osobnym zadaniu: staje się globalnym nieobsłużonym błędem, a promise na zawsze zostaje pending. Trzeba jawnie wywołać reject.