2017-05-08 69 views
0

我有以下ObservableObservable 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
  • 或者,我的代碼是完全錯誤的嗎?

任何意見讚賞。

+0

http://stackoverflow.com/questions/43831736/rxjs-execute-the-handler -only-once – martin

+0

您好Martin,感謝您的評論。然而,我確實得知''ts'屬性'多播'不存在於類型'Observable '.'。我可能需要進一步調查。 – Richard

+1

=>解決方案:'import'rxjs/add/operator/multicast';' – Richard

回答