Angularjs 为什么我的Observable只向最近的订阅者发送消息

Angularjs 为什么我的Observable只向最近的订阅者发送消息,angularjs,coffeescript,rxjs,Angularjs,Coffeescript,Rxjs,我有2个角度(1.6.4)组件和一个服务。该服务创建了2个这样的可观察对象(coffeescript) 在我的控制器中,我有这些线路 //Component 1 service.observable.subscribe (v) => console.log('consumer A1: ' + v) service.observable2.subscribe (v) => console.log('consumer A2: ' + v) //Component 2 service.ob

我有2个角度(1.6.4)组件和一个服务。该服务创建了2个这样的可观察对象(coffeescript)

在我的控制器中,我有这些线路

//Component 1
service.observable.subscribe (v) => console.log('consumer A1: ' + v)
service.observable2.subscribe (v) => console.log('consumer A2: ' + v)
//Component 2
service.observable.subscribe (v) => console.log('consumer B1: ' + v)
service.observable2.subscribe (v) => console.log('consumer B2: ' + v)
我希望看到4个控制台日志,但我看到的是3个(A1、B1、B2)。为什么当我从外部调用时,只有最后一个订阅被调用,但当它在内部时,两个订阅都被调用?有没有一种方法可以让第二个示例同时调用两者(最好是作为可观察对象而不是主体)


如果我确实使用了一个主题,那么一切都会如预期的那样工作,但我仍然很好奇,为什么它不会像我预期的那样与一个可观察对象一起工作。

您的可观察对象2每次订阅某个对象时都会将订阅对象存储在一个变量(
@observer
)中。因此,第二次订阅(
B2
)将替换变量中的值

很难说重写第二个观察者的正确方法应该是什么,因为不清楚你的目标是什么。一门学科肯定能奏效<代码>可观察。计时器也可能工作,具体取决于您的目标

可观察的计时器方式为:

@observable2 = Observable.timer(1000);

订阅的任何东西都会在订阅后1秒获得一个事件。

您的Observer2会在每次订阅某个东西时获取订阅者并将其存储在变量(
@observer
)中。因此,第二次订阅(
B2
)将替换变量中的值

很难说重写第二个观察者的正确方法应该是什么,因为不清楚你的目标是什么。一门学科肯定能奏效<代码>可观察。计时器也可能工作,具体取决于您的目标

可观察的计时器方式为:

@observable2 = Observable.timer(1000);

订阅的任何东西都会在订阅后1秒收到一个事件。

我明白了,所以我认为我缺少的部分是,每次有人订阅时,它都会创建一个新的观察者。这就是我遗漏的部分。我明白了,所以我认为我遗漏的部分是,每当有人订阅它时,它就会创建一个新的观察者。那是我错过的部分。