При разработке приложений мы можем сделать общие точки перехвата ошибок, например, с помощью window.onerror или window.onunhandledrejection(Для промисов). Также можно использовать обработку ошибок через try-catch если нужно детализировать ошибку.
В этом разделе рассмотрим подход при котором класс заранее объявляет, что ему нужен гость для передачи сообщений ошибок.
Результат 1.
Пример 1.
import { SourceActive, SourceEmpty, GuestCast, Patron } from "patron-oop";
class Random {
constructor(till) {
this.activeSource = new SourceActive((_, source) => {
source.give(Math.round(Math.random() * till));
});
}
do() {
this.activeSource.do();
return this;
}
value(guest) {
this.activeSource.value(guest);
return this;
}
}
window.random = new Random(99);
class EvenNumberMessage {
constructor(baseNumber, errorGuest) {
this.baseNumber = baseNumber;
this.errorGuest = errorGuest;
}
value(guest) {
this.baseNumber.value(
new GuestCast(guest, (value) => {
if (value % 2 === 0) {
guest.give(`${value} - четное!`);
} else {
this.errorGuest.give(`${value} - не четное!`);
}
})
);
return this;
}
}
const randomErrors = new SourceEmpty();
const randomMessage = new EvenNumberMessage(random, randomErrors);
random.value(
new Patron((val) => {
document.querySelector(".guest-result").textContent = val;
})
);
randomMessage.value(
new Patron((val) => {
document.querySelector(".guest-message").textContent = val;
})
);
randomErrors.value(
new Patron((val) => {
document.querySelector(".guest-error").textContent = val;
})
);
На уровне приложения, если нам нужно обрабатывать ошибки централизованно можно создать один объект от класса SourceEmpty и передавать этот объект в качестве посетителя для любых ошибок, что позволит собрать все ошибки в одном месте и обработать.