AngularのFirebaseライブラリであるAngularfireで特定のドキュメントを見つけようとしています。正しいドキュメントIDを返すオブザーバブルを取得しました。このオブザーバブルをサブスクライブし、内部のIDを使用して、ドキュメント上のすべてのデータをフェッチします。これもオブザーバブルとして返されます。
getSessions(date: firestore.Timestamp) {
this.db.collection('days', ref => ref.where('date', '==', date)).snapshotChanges().subscribe(docRef => {
return this.db.collection('days').doc(docRef[0].payload.doc.id).collection('sessions').valueChanges();
})
}
これに対する私の現在の試みは、最初に、必要なドキュメントのIDを取得します。これは私が購読している最初の観察可能なものになります。このサブスクリプション内では、IDを使用してネストされたsessions
コレクションを取得します。this.db.collection('days').doc(docRef[0].payload.doc.id).collection('sessions').valueChanges();
必要なものを正確に取得しますが、これを返そうとすると、receiveingメソッドはundefined
値のみを取得します。これは非同期の問題として私を襲います。
の使用を提案する投稿をいくつか見ましたswitchMap
が、これを実行しようとしてもうまくいきませんでした。
getSessions(date: firestore.Timestamp) {
this.db.collection('days', ref => ref.where('date', '==', date)).snapshotChanges().pipe(switchMap(docRef => {
return this.db.collection('days').doc(docRef[0].payload.doc.id).collection('sessions').valueChanges();
}))
}
参考までに、collection
メソッドは常にobservableを返します。サブスクリプションの外で、最も内側の行を単独で実行した場合、それは観察可能なものを返し、必要な動作を問題なく完了します。
私はswitchMap
うまくいくはずだと思います、しかしあなたは関数でobservableを返さなければなりません。
getSessions(date: firestore.Timestamp) {
// !! check out the first return here !!
return this.db.collection('days', ref => ref.where('date', '==', date)).snapshotChanges().pipe(switchMap(docRef => {
return this.db.collection('days').doc(docRef[0].payload.doc.id).collection('sessions').valueChanges();
}))
}
...
this.getSessions(...).subscribe(data => { console.log(data) });
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加