Here рекомендуются, чтобы закончить обещает цепочку с проделанными методами ошибки быть повторно брошено:сделан() на использовании Обещания/А + спецификации в угловом
Золотое правилом сделано против затем использование является : либо верните свое обещание кому-то другому, либо если цепочка закончится с вами, сделайте звонок, чтобы завершить . Завершение с уловом недостаточно, потому что обработчик уловов может сам выдать ошибку.
Применяется к AngularJs? Я посмотрел и, похоже, такого метода не существует.
UPDATE:
Я принял взглянуть на код и нашел следующее:
try {
if (isFunction(fn)) {
promise.resolve(fn(state.value));
} else if (state.status === 1) {
promise.resolve(state.value);
} else {
promise.reject(state.value);
}
} catch (e) {
promise.reject(e);
exceptionHandler(e);
}
window.onerror = function(e) {
// doesn't come here
}
Так в основном угловой дополнительно регистрирует ошибку из обработчика посыла в exceptionHandler(e);
поэтому он не Оставайтесь незамеченными. Если необходимо, поведение по умолчанию exceptionHandler
может быть перечеркнуто, как описано here.
Спасибо, так что нет способа поймать ошибку, брошенную внутри обработчика 'catch', как показано в моем обновлении? И так как «$ exceptionHandler» углового 'ловит ошибки, выброшенные внутри обещаний (которые, согласно спецификации, потребляются в рамках обещаний), ошибка не останется незамеченной, верно? –
Да, мой пример недействителен, извините, не подумал. Идея состоит в том, что если исключение происходит внутри обратного вызова 'c' здесь' .catch (c) ', без' done() 'это исключение не будет сообщаться в не угловом приложении в соответствии с документами' Q' и останется незамеченным, верно? –
@Maximus: Да, он просто отверг бы обещанное обещание. Что может быть или не быть незамеченным (только в конце цепи обещаний). – Bergi