首页 > 其他分享 >RxJS 系列 – Observable to Subject (Hot, Cold, Warm, connectable, share)

RxJS 系列 – Observable to Subject (Hot, Cold, Warm, connectable, share)

时间:2022-10-01 14:46:32浏览次数:69  
标签:Observable console connectable share subscribe Hot Cold Subject

前言

前两篇介绍了 Observable 和 Subject.它们有一个重大区别当 multiple subscribe 的时候.

Observable 每一次 subscribe 都会调用初始化方法, 并且创建出独立的一个 stream. 

Subject 则只是把 subscriber 存起来, next 的时候批量调用.

许多人也把 Observable 这种每一次都会创建出新的 source 的行为称为 Cold Observable

而向 Subject 那样每次 subscribe 不会创建出新 source 的行为称为 Hot Observable

参考: Medium – Hot vs Cold Observables

通常我们比较喜欢 Hot Observable (但不是 100%) 所以 RxJS 有一些方法可以把 Cold 变成 Hot.

这篇主要就是介绍这个.

 

Cold Observable Behaviour

const obs = new Observable(subscriber => {
  console.log('Observable init');

  let index = 0;
  const intervalNumber = setInterval(() => {
    subscriber.next(index++);
    if (index === 5) {
      clearInterval(intervalNumber);
      subscriber.complete();
    }
  }, 1000);

  return () => {
    console.log('Displose Observable');
    clearInterval(intervalNumber);
  };
});

obs.subscribe({
  next: v => console.log('first', v),
  complete: () => console.log('complete'),
});
setTimeout(() => {
  obs.subscribe({
    next: v => console.log('second', v),
    complete: () => console.log('complete'),
  });
}, 2000);

有一个 Observable, 被 subscribe 2 次

效果

 

它会创建出 2 个独立的 interval, 相互不影响.

 

Cold to Hot 原理

 

如果我们希望它只创建一次, 2 个 subscribe 订阅同一个 source 可以吗?

可以, 它的底层实现原理就搞一个中间人 Subject 出来.

 

标签:Observable,console,connectable,share,subscribe,Hot,Cold,Subject
From: https://www.cnblogs.com/keatkeat/p/16747179.html

相关文章