Как стать автором
Обновить

Комментарии 4

Спасибо за статью. Очень понятно изложено.

На практике вы часто используете горячие и холодные observable или подогреваете их?
Или это чисто теоретическая фишка? )))

В основном теоретическая, но на практике не редко используем операторы мультикастинга.

Что-то мне не кажется пример с getCurrentDate() таким чудесным.

Сделаем небольшое усложнение:

function strangeDate() {
  const value = getCurrentDate();
  function getValue() {
    return value;
  }
  return new Observable((subscriber) => {
    subscriber.next(getValue());
  });
}

Этот код имеет поведение в точности как у hotDate, но при этом по форме больше похож на coldDate. Так холодный он или горячий? На самом деле этот вопрос не имеет смысла, холодность или горячесть относятся к процессам, а не к значениям.

Проще продемонстрировать различие этих понятий на тех вещах, которые изначально имеют этот признак, просто по своей природе. Например, типичный http-запрос холодный:

function http(req) {
  return new Observable(subscriber => {
    const abort = new AbortController();
    fetch(req, { signal: abort.signal }).then(
      x => { subscriber.next(x); subscriber.complete() },
      x => subscriber.error(x);
    );
    return () => abort.abort();
  });
}

Каждый вызов subscribe будет приводить к отправке нового запроса, отмена подписки же отменит запрос. Это типичное поведение холодного Observable.

В то же время, если подписаться на события DOM - этот поток будет горячим:

function events(element, type, options) {
  return new Observable(subscriber => {
    const listener = e => subscriber.next(e);
    element.addEventListener(type, listener, options);
    return () => element.removeEventListener(type, listener, options);
  });
}

Не смотря на то, что этот код выглядит похожим по форме на предыдущий, разница принципиальная: события происходят независимо от подписчиков, каждый подписчик слушает лишь те события, которые произошли пока он был подписан.

Спасибо за комментарий. Хорошие примеры, тоже хотел сначала взять такие. Но показалось что легче для восприятия будет более простой пример. 

Зарегистрируйтесь на Хабре , чтобы оставить комментарий