Trzon odpowiedź leży w lakonicznym podsumowaniem Ben Lesh za:
TL; DR: chcesz HOT zaobserwować, gdy nie chcesz, aby utworzyć producent kółko.
W bezpośredniej odpowiedzi na pytanie "Jaki jest przypadek, w którym wolisz lub użyj zimna obserwowalnego na gorącym?", Przedstawię zarówno ogólną odpowiedź, jak i konkretny przykład.
Zasadniczo wygodniej jest używać chłodu obserwowalnego do modelowania strumieni, które są tworzone za każdym razem, gdy są potrzebne, niż do tworzenia gorących i próbowania ich sparafrazować.
W szczególności rozważ następujący prosty przykład. Powiedzmy, że chcesz odpowiedzieć na kliknięcie przycisku, odliczając od 10. Jeśli przycisk zostanie kliknięty ponownie podczas odliczania, zacznie się od nowa o 10. Jeśli klikniesz "$ model" zdarzeń przycisku, możesz mieć coś takiego:
const subscription = click$
.flatMapLatest(_ => Rx.Observable.interval(1000).take(10))
.select(x => 10 - x)
.subscribe(x => console.log('clicked: ' + x));
Zastanów się, jak byłoby to modelowane bez zauważalnego zimna. W jaki sposób:
- Zainicjować strumień wcześniej, aby odpowiednie wartości były dostępne w razie potrzeby?
- Unikaj zajmowania się ułamkiem sekundy między tykami interwałów a czasem subskrypcji?
- Skorzystaj z liczby porządkowej, która może zaczynać się od dowolnej liczby zamiast 1?
- Zarządzaj logiką czyszczenia strumienia?
1 i 3 można łatwo rozwiązać, ale 2 i 4 są nieprzyjemne.
W odpowiedzi na twoje drugie pytanie "Czy to lenistwo?" Twierdzę, że tak nie jest. Zimny obserwowalny może pozostawić go do momentu subskrypcji, aby wytworzyć jego wartości. Gorący obserwowalny może pozostawić go do momentu subskrypcji, aby zawiesić odpowiednie zdarzenia. Oboje są leniwi na swój sposób (a przynajmniej mogą być). Główna różnica polega na tym, co Ben Lesh powiedział: czy chcesz za każdym razem stworzyć producenta? A czasami tak naprawdę.
Chodzi o to, że jest zimno, gdy * nie jest używane *. Możesz stworzyć obserwowalne, bez względu na to, czy jest używane, czy nie, ale nie będzie pobierać żadnych zasobów. – Bergi
@Bergi, więc co jest zaletą? Lenistwo? – m0meni