2017-05-08 13 views
0

私はObservableを次ています複数回呼び出される観測可能なサブスクリプションですか?

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.ts

findMessages(chatItem: any): Observable<any[]> { 
    return Observable.create((observer) => { 
     this.firebaseDataService.findMessages(chatItem).subscribe((firebaseItems: any[]) => { 
       // do something 
       observer.next(somedata); 
     }); 
    }); 
} 

10関数は一度しか呼び出されません。

これは、firebaseリストを観察します。したがって、リスト内のアイテムが変更された場合、このObservableが発効します。

機能にアクセスする、または1つの項目がリストに追加されている場合は問題

は、予想通りオブザーバーが解雇されていますが、// do something行が複数回呼び出されます。私はそれが一度呼び出されることを期待しています。

質問

  • は、それが一度だけ呼ばれていますことを強制する方法はありますか?
  • または初めて電話を受けたときは、
    subscribeから脱出するのは初めてですか?
  • または、コードは完全に間違っていますか?

いずれかのアドバイスをいただきありがとうございます。

+0

http://stackoverflow.com/questions/43831736/rxjs-execute-the-handler:あなたは項目を1つだけ取りたい場合は、taketakeオペレータ

もっと

ドキュメントを使用することができます-only-once – martin

+0

こんにちはマーティン、コメントありがとう。私はしかし、 '[ts] Property' multicast 'が' Observable 'という型には存在しません。私はもう少し調べる必要があるかもしれません。 – Richard

+1

=>次のように解決されました: 'import 'rxjs/add/operator/multicast';' – Richard

答えて

関連する問題