Firestore Array.map подписывайтесь на коллекции - PullRequest
0 голосов
/ 10 июля 2019

У меня есть массив элементов, одно свойство которых является ссылкой на документ, в котором есть коллекция. Как я могу получить массив элементов, одним свойством которых будет подписка на документ, на который ссылаются документы из коллекции?

    let myResult = myArray.map(data => {
                               return {...data, 
                               subscription : this.afs.doc(data.refDocument)
                                               .valueChanges().subscribe()}});

Когда попытка получить информацию из subscription возвращает мне Observable (как я полагаю), но я бы хотел получить массив его документов.

1 Ответ

0 голосов
/ 10 июля 2019

Вы можете использовать forkJoin вот так [см. Описание в комментарии]:

const allObs = myArray.map(data => {                            
                        return this.afs.doc(data.refDocument)
                                   .valueChanges()
                                   //I am assuming that this.afs.doc(data.refDocument).valueChanges() observable
                                   //returns docs for the data
                                   .pipe(
                                       //lets take first instance if you expect this to change
                                       //then remove it
                                       take(1),

                                       //lets map the recieved docs to and object which has data + docs
                                       map(doc => {
                                           return {
                                               ...data, docs: doc
                                           };
                                       })
                                   );
                    }
                  );

        forkJoin(allObs).subscribe((result) => {
            //result will be an array of objects; Object -> {...data, docs}
            console.log(result);
            //Do whatever you want to do with result
        });

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...