Middle+
JavaScriptтеги Observable объекти кайсы маалыматтык түзүмгө окшош?
sobes.tech AI
AIден жооп
Маалыматтардын түзүмү суулук 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('Отписка');
// Мында генераторду/таймерлерди токтотуу логикасы болушу мүмкүн
}
};
}
// Биринчи жазылуучу
const subscription1 = coldObservableExample({
next: (value) => console.log('Жазылуучу 1 алган:', value),
error: (err) => console.error('Ката 1:', err),
complete: () => console.log('Жазылуучу 1 аяктады')
});
// Экинчи жазылуучу (башталат баштан)
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 ар бир жаңы жазылуучу үчүн толук маалымат агымын сактап жана кайра ойнойт. Бул өзгөчөлүк аны JavaScript Observable (RxJS жана окшош китепканалар контекстинде) концепциясына жакындатып турат.
Жөнөкөйлөштүрүлгөн салыштыруу:
| Өзгөчөлүк | Суулук Observable | Ысык Observable |
|---|---|---|
| Баштоо кыймылга келтирүү | Жазылуу менен | Дароо |
| Агым жазылуучулар үчүн | Ар бир үчүн толук агым | Жазылуу учурунан баштап маанилер |
| Колдонуу | HTTP суроолор, файлдар окуу, кайталоо | DOM окуялары, веб-сокеттер, таймерлер |