You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

一个Observable能否拥有多个订阅者?为何示例代码双订阅可正常运行?

为什么同一个Observable能被多次订阅且都正常工作?

你之前的认知有误——RxJS里默认创建的是「冷Observable」,这类Observable的核心特点是:每调用一次subscribe(),就会重新执行一遍Observable构造函数里的回调逻辑。

拿你贴的代码来说:

  • 第一次调用observable.subscribe()时,会触发构造函数里的逻辑,开启一个2秒的定时器;
  • 第二次调用observable.subscribe()时,又会重新走一遍构造函数逻辑,再开一个独立的2秒定时器;
  • 两个定时器到点后,各自对应的subscriber.next(4)会触发,所以两个订阅者的next回调都会收到值,received0和received1自然都会被打印。

简单区分冷、热Observable:

  • 冷Observable:每个订阅者独享一套数据流,只有当有人订阅时,才会启动数据流的生成逻辑。像定时器、HTTP请求这类都属于冷Observable。
  • 热Observable:所有订阅者共享同一套数据流,哪怕没有订阅者,数据流可能已经在运行了(比如DOM的点击事件、WebSocket推送)。如果想把冷Observable转成热的,可以用share()、publish()这类操作符。

你的代码示例:

const observable = new Observable((subscriber) => {
      sub : Subscriber;
      
      setTimeout(() => {
        subscriber.next(4);
        subscriber.complete();
      }, 2000);
    });
    observable.subscribe({
      next: (value) => {
        console.log("received0: "+value);
      }
    });
    observable.subscribe({
      next: (value) => {
        console.log("received1: "+value);
      }
    });

内容的提问来源于stack exchange,提问作者rejkid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 15:15:55