Класс SourceActive

SourceActive на GitHub

Класс Source можно назвать пассивным источником данных, потому что мы только вызываем его метод value и надеемся получить данные, либо говорим что нас нужно уведомлять о новых данных. При этом никаких активных действий совершать не требуется

Класс SourceActive можно назвать активным источником данных. Чтобы значение было рассчитано мы должны явно вызывать метод do. Подобные классы полезны в случаях, когда вычисление нужно выполнить не сразу а по событию

Также можно отдельно использовать ActionType интерфейс для объявления своих собственных классов - активных источников данных, имеющих метод do

Пример 1.

import { SourceActive, Patron } from "patron-oop";

const eur = new SourceActive((_, source) => {
    source.give("Loading...");
    fetch("https://www.cbr.ru/scripts/XML_daily.asp")
    .then((r) => r.text())
    .then((r) => {
        const parser = new DOMParser();
        const doc = parser.parseFromString(r, "application/xml");
        const eurNode = doc.querySelector('[ID="R01239"] Value');
        source.give(eurNode.textContent);
    });
});

eur.value(
    new Patron((val) => {
        document.querySelector(".guest-result").textContent = `EUR/RUB = ${val}`;
    })
);

document
    .getElementById("get-eur")
    .addEventListener("click", eur.do.bind(eur));

Результат 1.

Нажмите кнопку "Get EUR"
Смотрите также

Source