Обработка ошибок

При разработке приложений мы можем сделать общие точки перехвата ошибок, например, с помощью 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 и передавать этот объект в качестве посетителя для любых ошибок, что позволит собрать все ошибки в одном месте и обработать.