2017-07-18 50 views
0

我有2個Angular(1.6.4)組件和一個服務。服務營造觀測2這樣(的CoffeeScript)...爲什麼我的Observable只發送消息給最近的用戶

// In service constructor 
@observable = Rx.Observable.create (source) => 
     source.next(123) 
@observable2 = Rx.Observable.create (source) => 
     @observer = source 
$timeout => 
     @observer.next(345) 
, 1000 

在我的控制器,我有這些行

//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)。爲什麼當我從外面打電話時只有最後一次訂閱被調用,但是當它在裏面都被調用?有沒有辦法讓第二個例子調用兩者(最好是作爲Observable而不是Subject)?

如果我確實使用了主題,一切都按預期工作,但我仍然好奇它爲什麼不能像我期望的那樣可以觀察到。

回答

2

您的observable2正在接收用戶,並在每次訂購某個變量時將其存儲在變量(@observer)中。所以第二次訂閱(B2)正在替換變量中的值。

很難說重寫第二個觀察者的正確方法應該是什麼,因爲它不清楚你的目標是什麼。一個主體當然可以工作。 Observable.timer也可能工作,這取決於你的目標。

的Observable.timer方法是:

@observable2 = Observable.timer(1000); 

凡是贊同其認購後會得到一個事件1秒。

+0

我明白了,所以我認爲我錯過的部分是每次有人訂閱它時創建一個新的觀察者。那是我錯過的部分。 – Jackie

相關問題