Cốt lõi của câu trả lời nằm trong bản tóm tắt ngắn gọn Bến Lesh của:
TL; DR: Bạn muốn có một HOT thể quan sát được khi bạn không muốn tạo sản xuất của bạn hơn và hơn nữa.
Trong câu trả lời trực tiếp cho câu hỏi "Trường hợp bạn thích hoặc sử dụng lạnh có thể quan sát được trên nóng?", Tôi sẽ cung cấp cả câu trả lời chung và ví dụ cụ thể.
Nói chung, việc sử dụng lạnh có thể quan sát được để mô hình các luồng được tạo ra mỗi khi chúng được yêu cầu nhiều hơn là tạo ra một nóng và cố gắng sắp xếp nó.
Cụ thể, hãy xem xét ví dụ tầm thường sau đây. Giả sử bạn muốn trả lời nhấp chuột vào nút bằng cách đếm ngược từ 10. Nếu nút được nhấp lại trong khi đếm ngược, nút sẽ bắt đầu lại ở 10. Nếu nhấp vào $ mô hình sự kiện nút, bạn có thể có thông tin như sau:
const subscription = click$
.flatMapLatest(_ => Rx.Observable.interval(1000).take(10))
.select(x => 10 - x)
.subscribe(x => console.log('clicked: ' + x));
Hãy xem xét cách thức này sẽ được mô hình hóa mà không có sự quan sát lạnh. Bạn sẽ như thế nào:
- Bắt đầu luồng trước để các giá trị thích hợp có sẵn khi được yêu cầu?
- Tránh phải đối phó với phần nhỏ của giây giữa các khoảng thời gian và thời gian đăng ký của bạn?
- Đối phó với các đơn vị có thể bắt đầu ở bất kỳ số nào thay vì chỉ 1?
- Quản lý logic dọn dẹp cho luồng?
1 và 3 có thể được giải quyết khá dễ dàng, nhưng 2 và 4 là khó chịu.
Để trả lời câu hỏi thứ hai của bạn "Có lười biếng không?" Tôi cho rằng nó không phải. Một lạnh quan sát có thể để nó cho đến thời điểm đăng ký để tạo ra giá trị của nó. Một quan sát nóng có thể rời khỏi nó cho đến thời điểm đăng ký để móc các sự kiện thích hợp. Cả hai đều lười biếng theo cách riêng của họ (hoặc ít nhất, có thể là). Sự khác biệt chính nằm ở những gì Ben Lesh nói: bạn có muốn tạo ra một nhà sản xuất mỗi lần không? Và đôi khi, bạn thực sự làm.
Nguồn
2016-05-04 12:55:43
Mục đích là lạnh khi không sử dụng *. Bạn có thể tạo ra các quan sát, bất kể cho dù nó được sử dụng hay không, nhưng nó sẽ không mất bất kỳ tài nguyên. – Bergi
@Bergi vì vậy lợi thế là gì? Sự lười biếng? – m0meni