Класс SourceMap

SourceMap на GitHub

Класс SourceMap нужен в случаях обработки множества значений, через создание на основе этих значений объектов - источников данных. Например у нас есть класс - результат умножения числа на 2. SourceMap позволит применить этот класс к какому-то итерируемому источнику данных, преобразовывая каждое значение в новое, в результате получим новый итерируемый источник данных, в котором все числа умножены на 2.

Пример 1.

import { Source, SourceWithPool, GuestCast, SourceMap, PrivateClass, give } from "patron-oop";

class X2 {
  constructor(baseNumber) {
    this.baseNumber = baseNumber;
  }

  value(guest) {
    this.baseNumber.value(
      new GuestCast(guest, (v) => {
        give(v * 2, guest);
      })
    );
    return this;
  }
}

const source = new SourceWithPool([1, 2, 3, 9]);
const guestMapped = new SourceMap(source, new PrivateClass(X2));

guestMapped.value((v) => {
  document.querySelector(".guest-result").textContent = v.join();
});

Результат 1.

Result here

Так же можно передавать итерируемый источник источников данных. Благодаря этому можно параллельно вычислить общий результат нескольких источников. Пример использования ниже

Пример 2.

import {
  Source,
  SourceWithPool,
  GuestCast,
  SourceMap,
  PrivateClass,
  give,
  isSource,
} from "patron-oop";

(() => {
  class X3 {
    constructor(baseNumber) {
      this.baseNumber = baseNumber;
    }

    value(guest) {
      this.baseNumber.value(
        new GuestCast(guest, (v) => {
          give(v * 3, guest);
        })
      );
      return this;
    }
  }

  const numSource = (num) =>
    new Source((guest) =>
      setTimeout(() => {
        give(num, guest);
      }, 8000)
    );

  const source = new SourceWithPool([
    numSource(1),
    numSource(2),
    numSource(3),
    numSource(4),
    numSource(5),
  ]);
  const map = new SourceMap(source, new PrivateClass(X3));

  map.value((v) => {
    document.querySelector(".guest-result-2").textContent = v.join();
  });
})();

Результат 2.

Все результаты через 8 сек.