AnrDaemon
Продвинутый новичок
Есть какой-то такой код:
Всё замечательно, ошибки ловятся, тосты показываются, но КАЖДЫЙ […]ятский раз, когда дело доходит до `super(message);`, она срёт в консоль. Прямо хоть не вызывай.
Может, я чего-то не понимаю? Может, не надо звать родительский конструктор? Или надо как-то иначе глушить ошибки?
JavaScript:
"use strict";
export class PlatformError extends Error {
/**
* @param {string} message Error message to convey.
* @param {number} code Error code for reference.
*/
constructor(message, code = undefined) {
super(message);
this.name = 'PlatformError';
this.code = code;
Object.defineProperty(this, "code", { writable: false });
}
}
Object.defineProperty(PlatformError.prototype, 'code', {
configurable: false,
enumerable: true,
writable: true,
value: 0
});
window.addEventListener("error",
/** @param {ErrorEvent} event */
(event) => {
/** @type {PlatformError|Error|string} */
const error = event.error;
if (error instanceof PlatformError) {
// Если это наш косяк - глушим и показываем тост
event.preventDefault();
event.stopPropagation();
toast.[error.code == 0 ? "info" : "error"](`${error.name}${(error.code ? `(${error.code})` : '')}: ${error.message}`);
}
}
);
window.addEventListener('unhandledrejection',
/** @param {PromiseRejectionEvent} event */
(event) => {
if (!event.reason) return;
/** @type {PlatformError|Error|string} */
const error = event.reason;
if (error instanceof PlatformError) {
// Если это наш косяк - глушим и показываем тост
event.preventDefault();
event.stopPropagation();
toast.[error.code == 0 ? "info" : "error"](`${error.name}${(error.code ? `(${error.code})` : '')}: ${error.message}`);
}
}
);
Может, я чего-то не понимаю? Может, не надо звать родительский конструктор? Или надо как-то иначе глушить ошибки?