Мне интересно, знает ли кто-нибудь, как цепочки обещаний ссылаются на следующий обработчик ошибок - например:
const p = new Promise(resolve => resolve(5))
.then(v => 5*v)
.then(v => { throw 'foo' });
p.then(v => v/4)
.then(v => v+3)
.catch(e => console.error('first catch:', e));
p.then(v => v/4)
.then(v => v+3)
.catch(e => console.error('second catch:', e));
Если вы запустите это, вы получите:
first catch: foo
second catch: foo
Promise.prototype.then
мне известно, каждый раз, когда Promise.prototype.then
называется, новое обещание создается и возвращается. Единственный способ, которым я могу представить себе обещание, чтобы найти следующий обработчик ошибок для каждой цепочки, должен иметь массив ссылок на детей. Поэтому, если обещание отклонено, оно будет проходить через всех детей и найти ближайших обработчиков отклонения в каждой дочерней цепочке.
Кто-нибудь знает, как это реализовано?