Middle+
Na koju strukturu podataka u JavaScript-u liči objekat Observable?
sobes.tech АИ
Одговор од АИ
Структура података хладни Observable (на енглески Cold Observable), која је концепт из реактивног програмирања (на пример, у библиотечком RxJS).
Кључне сличности:
- Ленива природа: Observable почиње да емитује вредности само када постоји претплатник (subscriber). Без претплатника, Observable није активан.
- Многа претплатници, независни токови: Сваки нови претплатник добија пуну скуп вредности, почињући од почетка, независно од других претплатника. Ово ствара независне токове података за сваког претплатника.
Пример структуре хладног observable (теоретски):
// Замислите да је ово неки "генератор" вредности
function generateValues() {
let i = 0;
return {
// Метода која враћа следећу вредност (када се затражи)
next: function() {
return { value: i++, done: false };
}
};
}
// "Observable" - у суштини, само функција која прихвата претплатника
function coldObservableExample(subscriber) {
const generator = generateValues();
// Имитација емитовања вредности
setTimeout(() => {
subscriber.next(generator.next().value);
}, 100);
setTimeout(() => {
subscriber.next(generator.next().value);
}, 200);
setTimeout(() => {
subscriber.complete(); // Завршетак тока
}, 300);
// Враћамо објекат претплате (за одјаву)
return {
unsubscribe: () => {
console.log('Одјава');
// Овде може бити логика за заустављање генератора/таймера
}
};
}
// Претплатник 1
const subscription1 = coldObservableExample({
next: (value) => console.log('Претплатник 1 добио:', value),
error: (err) => console.error('Грешка 1:', err),
complete: () => console.log('Претплатник 1 завршен')
});
// Претплатник 2 (ће почети да добија вредности од почетка)
setTimeout(() => {
const subscription2 = coldObservableExample({
next: (value) => console.log('Претплатник 2 добио:', value),
error: (err) => console.error('Грешка 2:', err),
complete: () => console.log('Претплатник 2 завршен')
});
}, 150);
// Одјава првог претплатника
setTimeout(() => {
subscription1.unsubscribe();
}, 250);
За разлику од горячег Observable (Hot Observable), који почиње да емитује вредности одмах, независно од претплатника, и сви претплатници добијају вредности од тренутка претплате, хладни Observable чува и репродукује цео ток података за сваког новог претплатника. Ова карактеристика га приближава концепту Observable у JavaScript-у (у контексту RxJS и сличних библиотека).
Сажетак (поједностављено):
| Карактеристика | Хладни Observable | Горићи Observable |
|---|---|---|
| Почетак емитовања | При претплати | Одмах |
| Ток за претплатнике | Пун ток података за сваког | Вредности од тренутка претплате |
| Коришћење | HTTP захтеви, читање фајлова, итерације | DOM догађаји, веб сокети, таймери |