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