一个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
相关产品推荐
相关产品推荐

