Sobes.tech
Middle+

Объекти Observable дар JavaScript ба кадом сохтори додаҳо наздик аст?

sobes.tech AI

Ҷавоб аз AI

Т structure-и маълумот обсерватории хунук (аз англисӣ Cold Observable), ки як консепт аз барномасозии реактивӣ аст (масалан, дар китобхонаи RxJS).

Муштаракотҳои асосӣ:

  • Табиати бефаъолат: Обсерватория танҳо вақте оғоз мекунад, ки муштарӣ (subscriber) вуҷуд дорад. Бе муштарӣ, обсерватория фаъол нест.
  • Бештар аз як муштарӣ, ҷараёнҳои мустақил: Ҳар муштарии нав тамоми маҷмӯи арзишҳоро аз оғоз мегирад, бидуни таъсир аз дигар муштарӣ. Ин ҷараёнҳои мустақилро барои ҳар муштарӣ месозад.

Масалан, структураи обсерватории хунук (теоретикӣ):

// Тасаввур кунед, ки ин як "генератор" арзишҳо аст
function generateValues() {
  let i = 0;
  return {
    // Методи, ки арзиши ояндаро бармегардонад (ҳангоми дархост)
    next: function() {
      return { value: i++, done: false };
    }
  };
}

// "Обсерватория" - дар асл, танҳо функсияе, ки қабул мекунад муштариро
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);

// Бекор кардани муштарии 1
setTimeout(() => {
  subscription1.unsubscribe();
}, 250);

Баръакси обсерватории гарм (Hot Observable), ки аз аввал оғоз мекунад, бидуни назар ба муштарӣ, ва ҳама муштарӣ аз вақти сабти ном арзишҳоро мегиранд, обсерватории хунук тамоми ҷараёнро барои ҳар муштарии нав нигоҳ медорад ва такрор мекунад. Ин хусусият онро ба консепсияи Обсерватории JavaScript (дар контексти RxJS ва китобхонаҳои монанд) наздик мекунад.

Хулоса (осонкардашуда):

Хусусиятҳо Обсерватории хунук Обсерватории гарм
Оғози интиқол Вақте ки сабти ном мешавад Бисёртар
Тасвир барои муштарӣ Тасвир пурра барои ҳар як Арзишҳо аз вақти сабти ном
Истифода Хостҳои HTTP, хондани файлҳо, итератсия Воқеаҳои DOM, веб-сокетҳо, таймерҳо