Sobes.tech
Middle+

JavaScript-də Observable obyekti hansı məlumat quruluşuna yaxındır?

sobes.tech Süni İntellekt

AI-dan cavab

Məlumatların quruluşu Soyuq Observable (ingiliscə Cold Observable), reaktiv proqramlaşdırmadan bir konsepsiyadır (məsələn, RxJS kitabxanasında).

Əsas oxşarlıqlar:

  • Tənbəl təbiət: Bir Observable, yalnız abunəçi olduqda qiymətləri yaymağa başlayır. Abunə olmadan, Observable aktiv deyil.
  • Çoxlu abunəçilər, müstəqil axınlar: Hər yeni abunəçi, əvvəlkindən asılı olmayaraq, tam qiymət dəstini əvvəldən alır. Bu, hər abunəçi üçün müstəqil məlumat axınları yaradır.

Soyuq Observable strukturunun nümunəsi (konseptual):

// Bu, "qiymət generatoru" kimi təsəvvür edin
function generateValues() {
  let i = 0;
  return {
    // Növbəti qiyməti qaytaran metod
    next: function() {
      return { value: i++, done: false };
    }
  };
}

// "Observable" - əsasən, sadəcə, abunəçini qəbul edən funksiya
function coldObservableExample(subscriber) {
  const generator = generateValues();

  // Qiymətlərin yayılmasını təqlid edir
  setTimeout(() => {
    subscriber.next(generator.next().value);
  }, 100);

  setTimeout(() => {
    subscriber.next(generator.next().value);
  }, 200);

  setTimeout(() => {
    subscriber.complete(); // Axının tamamlanması
  }, 300);

  // Abunəlik obyektini qaytarır (lazım olduqda ləğv etmək üçün)
  return {
    unsubscribe: () => {
      console.log('Ləğv et');
      // Burada generator/timer-lərin dayandırılması üçün loqika ola bilər
    }
  };
}

// Abunəçi 1
const subscription1 = coldObservableExample({
  next: (value) => console.log('Abunəçi 1 aldı:', value),
  error: (err) => console.error('Xəta 1:', err),
  complete: () => console.log('Abunəçi 1 tamamlandı')
});

// Abunəçi 2 (başlanğıcdan qiymətləri almağa başlayacaq)
setTimeout(() => {
  const subscription2 = coldObservableExample({
    next: (value) => console.log('Abunəçi 2 aldı:', value),
    error: (err) => console.error('Xəta 2:', err),
    complete: () => console.log('Abunəçi 2 tamamlandı')
  });
}, 150);

// Birinci abunəçini ləğv et
setTimeout(() => {
  subscription1.unsubscribe();
}, 250);

İsti Observable (Hot Observable) ilə müqayisədə, o, qiymətləri dərhal yaymağa başlayır, abunə olsalar da, olmasalar da, və bütün abunəçilər abunə olunduğu andan qiymətləri alır. Soyuq Observable, hər yeni abunəçi üçün tam məlumat axınını saxlayır və təkrarlayır. Bu xüsusiyyət onu JavaScript-dəki Observable (RxJS və oxşar kitabxanalar kontekstində) konsepsiyasına yaxınlaşdırır.

Müqayisə (sadələşdirilmiş):

Xüsusiyyət Soyuq Observable İsti Observable
Başlanğıc Abunə olunduqda Dərhal
Axın abunəçilər üçün Hər biri üçün tam axın Abunə olunduğu andan qiymətlər
İstifadə HTTP sorğuları, fayl oxuma, iterasiya DOM hadisələri, veb-soketlər, zamanlayıcılar