Аргументом catch
является функция обратного вызова, а не ошибка.
Вы ищете
Promise.prototype.catch = (function(originalCatch) {
return function(onRejected) {
console.log('> > > > > > called .catch on %o with arguments: %o', this, arguments);
return originalCatch.call(this, error => {
if (typeof newrelic !== 'undefined') {
newrelic.noticeError(error);
} else {
console.error(error);
}
return onRejected(error);
});
};
})(Promise.prototype.catch);
Кстати, я бы рекомендовал не вмешиваться в Promise.prototype
,Перехват каждого вызова catch
даст вам довольно много ложных срабатываний (которые вы на самом деле не хотели регистрировать), а также ложных отрицаний (которые вы должны были перехватить), потому что обработчик ошибок был установлен с использованием then
или нет catch
был вызван вообще.Лучше четко указать, куда вы хотите, чтобы ошибки попадали в мониторинг, с помощью простого многоразового
function monitorError(error) {
if (typeof newrelic !== 'undefined') {
newrelic.noticeError(error);
} else {
console.error(error);
}
}
, который вы можете явно вводить или добавлять в цепочки обещаний с помощью простого
.catch(monitorError)