Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular Firebase无需订阅即可加入_Angular_Firebase_Google Cloud Firestore - Fatal编程技术网

Angular Firebase无需订阅即可加入

Angular Firebase无需订阅即可加入,angular,firebase,google-cloud-firestore,Angular,Firebase,Google Cloud Firestore,我需要连接Firebase Firestore DB中的两个表。要执行此操作,我必须从集合“Attenders”获取一个值,然后执行forEach以恢复集合“event”中的事件数据,将其推送到数组中,然后以承诺的形式返回数组 我正在使用.valueChanges().subscribe()。这里发生的事情是,如果我为该与会者添加一个新事件,订阅将工作并再次将数据推送到阵列中 我需要知道的是,联接表是如何工作的。有没有办法在没有订阅的情况下执行forEach 谢谢 编辑 这是用于执行联接的集合组

我需要连接Firebase Firestore DB中的两个表。要执行此操作,我必须从集合“Attenders”获取一个值,然后执行
forEach
以恢复集合“event”中的事件数据,将其推送到数组中,然后以承诺的形式返回数组

我正在使用
.valueChanges().subscribe()
。这里发生的事情是,如果我为该与会者添加一个新事件,订阅将工作并再次将数据推送到阵列中

我需要知道的是,联接表是如何工作的。有没有办法在没有订阅的情况下执行forEach

谢谢

编辑

这是用于执行联接的集合组合

findByUserUid(user_uid: string) {
    let events: any[] = [];
    console.log(events);

    return new Promise((resolve, reject) => {
      console.log(events);

      this.db
        .collection('attendees', ref => ref.where('user_uid', '==', user_uid))
        .snapshotChanges()
        .subscribe((attendeesSnaps: any) => {
          events = [];
          attendeesSnaps.forEach((attendeeSnapshot: any) => {
            this.db
              .collection('events')
              .doc(attendeeSnapshot.payload.doc.data().event_uid)
              .valueChanges()
              .subscribe((event: any) => {
                console.log(events);
                event.uid = attendeeSnapshot.payload.doc.data().event_uid;
                events.push(event);
                console.log('pushing', event);
              });
          });
        });
      console.log('all events', events);

      resolve(events);
    });
  }
更新集合“Attendes”(向-this-event添加新的与会者)时,foreach将再次执行,并且我在
events
数组中获得了重复数据(由于订阅再次返回)

我需要避免在每次收集更新中返回重复数据

编辑2

我已经解决了这个问题。使用
.ref.get()
效果很好!这是我的最终版本的方法(如果可以改进,请让我知道:)


Firestore中没有联接操作。是的,我知道,我正在合并两个集合的数据。也许,我问错了。
findByUserUid(user_uid: string) {
    const events: any[] = [];

    return new Promise((resolve, reject) => {
      this.db
        .collection('attendees')
        .ref.where('user_uid', '==', user_uid)
        .get()
        .then((attendeesSnaps: any) => {
          attendeesSnaps.forEach((attendeeSnapshot: any) => {
            this.db
              .collection('events')
              .doc(attendeeSnapshot.data().event_uid)
              .ref.get()
              .then((eventSnap: any) => {
                const event = eventSnap.data();
                event.uid = eventSnap.id;
                events.push(event);
              })
              .catch(err => {
                reject(err);
              });
          });
        })
        .catch(err => {
          reject(err);
        });
      resolve(events);
    });
  }