0
我有以下Observable
:Observable subscribe被多次調用?
dataService.ts
findMessages(chatItem: any): Observable<any[]> {
return Observable.create((observer) => {
this.firebaseDataService.findMessages(chatItem).subscribe((firebaseItems: any[]) => {
// do something
observer.next(somedata);
});
});
}
調用該函數:
firebaseDataService.ts
findMessages(chatItem: any): Observable<any[]> { // populates the firelist
return this.af.database.list('/message/', {
query: {
orderByChild: 'negativtimestamp'
}
}).map(items => {
const filtered = items.filter(
item => ((item.memberId1 === chatItem.memberId1 && item.memberId2 === chatItem.memberId2)
|| (item.memberId1 === chatItem.memberId2 && item.memberId2 === chatItem.memberId1))
);
return filtered;
});
}
的dataService.findMessages(chatItem)
功能只被稱爲一次。
這會觀察Firebase列表。因此,如果列表中的任何項目發生更改,則會觸發此Observable
。
問題
如果函數訪問,或者一個項目被添加到列表中,按預期的方式觀察被激發,但// do something
線被稱爲多次。我只希望它被調用一次。
問題
- 有沒有辦法強制執行,這只是調用一次?
- 或者一旦它第一次被呼叫,打破
subscribe
? - 或者,我的代碼是完全錯誤的嗎?
任何意見讚賞。
http://stackoverflow.com/questions/43831736/rxjs-execute-the-handler -only-once – martin
您好Martin,感謝您的評論。然而,我確實得知''ts'屬性'多播'不存在於類型'Observable'.'。我可能需要進一步調查。 –
Richard
=>解決方案:'import'rxjs/add/operator/multicast';' – Richard