Observable - “冷” vs “热” Observable

优质
小牛编辑
117浏览
2023-12-01

另一方面,还有一个热,这更像是一个现场表演。 你从一开始就参加一个现场乐队表演,但有些人可能迟到25分钟的节目。 乐队不会从头开始播放,后来者必须从那里开始观看表演。

在RxJS API中的方法是publish方法。 此方法接受一个冷Observable作为其来源,并返回一个ConnectableObservable的实例。 在这种情况下,我们必须显式调用connect在我们的热Observable开始广播值给其订阅者。

  1. const obsv = new Observable(observer => {
  2. setTimeout(() => {
  3. observer.next(1);
  4. }, 1000);
  5. setTimeout(() => {
  6. }, 2000);
  7. setTimeout(() => {
  8. observer.next(3);
  9. }, 3000);
  10. setTimeout(() => {
  11. observer.next(4);
  12. }, 4000);
  13. }).publish();
  14. // Subscription A
  15. setTimeout(() => {
  16. obsv.subscribe(value => console.log(value));
  17. }, 0);
  18. // Subscription B
  19. setTimeout(() => {
  20. obsv.subscribe(value => console.log(` ${value}`));
  21. }, 2500);

在上面的情况下,现场演出开始于1000ms,用户A在0秒到达音乐厅并找了一个好位置,用户B在2500ms处达到并错过了一首歌曲。
另一个有用的方法使用hot Observables而不是connect是 。 这是一种自动连接方法,只要有多个用户,就会立即开始广播。 类似地,如果订阅者的数量到0,它将停止; 换句话说,如果观众中的每个人走出来,演出都会停止。