Angular Firestore数据上的角度循环

Angular Firestore数据上的角度循环,angular,firebase,google-cloud-firestore,Angular,Firebase,Google Cloud Firestore,我有一个Angular应用程序,使用Firebase托管,使用Firestore存储我的数据。我想创建一个函数,读取特定集合的所有数据,并在文档上循环以执行特定操作(上传到GoogleDrive,已经编码) 然而,我正在努力循环我的Firestore收藏中的文档。这是我从Firestore中的“测试”集合读取数据的代码: read() { let result = []; this.firestore .collection("test") .snaps

我有一个Angular应用程序,使用Firebase托管,使用Firestore存储我的数据。我想创建一个函数,读取特定集合的所有数据,并在文档上循环以执行特定操作(上传到GoogleDrive,已经编码)

然而,我正在努力循环我的Firestore收藏中的文档。这是我从Firestore中的“测试”集合读取数据的代码:

read() {
    let result = [];

    this.firestore
      .collection("test")
      .snapshotChanges()
      .subscribe(item => {
        item.map(row => {
          result.push(row.payload.doc.data());
        })
      })

    return result;
  }
在另一个组件中,当我调用这个read()函数和console.log时,我可以看到集合中的所有数据。但是,当我尝试循环遍历文档和console.log时,它不会输出任何内容

async doSomething() {
    let allRows = await this.firebase.read();  // the function shown above
    console.log(allRows);  // I can see all the "rows"/documents in the collection

    allRows.forEach(item => console.log(item)); // but if I do this, it doesn't output anything
    console.log(allRows.length);  // even this outputs 0
}

我是否遗漏了一些明显的内容?

您的读取方法不会等待来自firestore的数据,因为它是一个异步操作并返回空白数组。您应该像这样更改read方法

read() {
    return new Promise((resolve, reject) => {
      let result = [];
      this.firestore
        .collection("test")
        .snapshotChanges()
        .subscribe(item => {
          Array.from(item).forEach(row => {
            result.push(row.payload.doc.data());
          });
          resolve(result);
        });
    });
  }

经过一番挖掘,我发现我的代码有问题。问题在于将读取操作的结果分配给变量
allRows

与此相反:

let allRows=wait this.firebase.read()

这对我很有用:

let allRows: any;
await this.firebase.read().then(result => allRows = result);

您好,我以前确实尝试过此操作,但在尝试对结果数组执行forEach时出现错误:
属性“forEach”在类型“unknown”上不存在。
您可以使用map。我也尝试过此操作,但相同的错误
属性“map”在类型“unknown”上不存在。
更新了我的答案。请尝试并让我知道它是否有效?好的,正在进行中,现在我可以在控制台中看到预期的结果,但由于某些原因,它仍然同时抛出该错误。如果您正在使用wait,则无需使用then