私は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
から脱出するのは初めてですか? - または、コードは完全に間違っていますか?
いずれかのアドバイスをいただきありがとうございます。
http://stackoverflow.com/questions/43831736/rxjs-execute-the-handler:あなたは項目を1つだけ取りたい場合は、
take
上take
オペレータもっと
ドキュメントを使用することができます-only-once – martin
こんにちはマーティン、コメントありがとう。私はしかし、 '[ts] Property' multicast 'が' Observable 'という型には存在しません。私はもう少し調べる必要があるかもしれません。 –
Richard
=>次のように解決されました: 'import 'rxjs/add/operator/multicast';' – Richard