Эксперт хотел, чтобы вложенный сбор AngularFire2 Firestore получал данные? - PullRequest
0 голосов
/ 26 октября 2018

Эй, я не могу найти, как я могу сделать вложенный запрос в firestore?

this.match1 = this.MatchCollection1.snapshotChanges().pipe(map(actions => {
    return actions.map(a => {
        const data = a.payload.doc.data() as Matches;
        const uid = data.pairer;
        const id = a.payload.doc.id;
        const photourl = afs.collection(`users/${uid}/photos`,
            ref => ref.where('index', '==', 0).where('deleted', '==', false)).snapshotChanges().pipe(map(action => {
            return action.map(p => {
                const pdata = p.payload.doc.data() as Photos;
                return pdata.url;
            });
        }));
        return {id, uid, url: photourl, ...data};
    });
}));

Моя проблема с возвратом фотолаборатории наблюдается, как я могу вернуть объект, как другие

Ответы [ 2 ]

0 голосов
/ 04 ноября 2018

Вы можете использовать метод toPromise с async await .

Структура данных

users
  | userId1
      | photos
          | photoId1
                | url : 'someURL'
          | photoId2
                | url : 'someURL2'

Файл службы или компонента

items;
getPhotos(uid){
  return this.db.collection(`users/${uid}/photos`).valueChanges()
  .pipe(first()).toPromise() // get first stream and return it as promise
}

async fooFunc() {

  let user_id = 'userId1' //TODO: get user uid from somewhere

  this.items = await this.getPhotos(user_id) // await getPhotos promise finish
  console.log(this.items) // return [Object, Object]
}

html-шаблон компонента

<li *ngFor="let item of items">
    {{ item | json }}
</li>    

вывод

{ "url": "someURL" }
{ "url": "someURL2" }
0 голосов
/ 29 октября 2018

Немного сложно следовать, но я думаю, что все, что вам нужно сделать, это переместить ваш return {id, uid, url: photourl, ... data};Из того, что я вижу, вы просто пропускаете подписку, чтобы распаковать наблюдаемое и извлечь значение.EG

 return action.map(p => {
              const pdata = p.payload.doc.data() as Photos;
              return pdata.url;
            });
          })).subscribe(photo => {
"if you want to set photourl do it here photourl = photo.url;"
            return photo; //do what you need to before you return the actual 
photo object.

          });
...