Класс SourceSequence

SourceSequence на GitHub

Класс SourceSequence работает так же как и SourceMap , но перебирает источнники данных последовательно а не параллельно

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

Пример 1.

import {
  Source,
  Patron,
  GuestCast,
  SourceWithPool,
  SourceSequence,
  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 tillResult = new SourceWithPool(9);
const numSource = (num) =>
  new Source((guest) =>
    setTimeout(() => {
      tillResult.value((theValue) => {
        tillResult.give(theValue - 1);
      });
      give(num, guest);
    }, 1000)
  );

const source = new SourceWithPool([
  numSource(1),
  numSource(2),
  numSource(3),
  numSource(4),
  numSource(5),
  numSource(6),
  numSource(7),
  numSource(8),
  numSource(9),
]);
const sequence = new SourceSequence(source, new PrivateClass(X3));

sequence.value((v) => {
  document.querySelector(".guest-result").textContent = v.join();
});
tillResult.value(
  new Patron((v) => {
    document.querySelector(
      ".guest-result"
    ).textContent = `Результат через ${v} сек.`;
  })
);

Результат 1.

Result here