node.js - undefined 不可迭代(无法读取属性 Symbol(Symbol.iterator))

标签 node.js angular typescript firebase

我正在尝试循环遍历文件列表以执行删除查询。首先,我从数据库中的表"file"中获取数据,其中属性 "postnumber"=user输入。然后保存到“fileList:Files[]”中。然后循环访问此 fileList 以执行删除查询。但它一直说

"ERROR TypeError: undefined is not iterable (cannot read property Symbol(Symbol.iterator))". See this image =>

error.jpg

forum-admin-list.component.ts

import { FileService } from 'src/app/shared/file.service';
import { Files } from 'src/app/shared/files.model';
export class ForumAdminListComponent {
fileList:Files[];
onDelete(pNo:string){ 
        this.fservice.getPost(pNo).subscribe(actionArray => {
          this.fileList = actionArray.map(item => {
            return {
              id: item.payload.doc.id,
              ...item.payload.doc.data()
            } as Files;
          })
        });
        for(let i of this.fileList){
          this.storage.storage.refFromURL(i.path).delete();
          this.firestore.doc("files/"+i.id).delete();
        }
  }
}

files.model.ts

export class Files {
    id:string;
    pNo:string;
    downloadURL:string;
    path:string;
}

file.service.ts

export class FileService {
    formData: Files; 
    constructor(private firestore: AngularFirestore) { }

    getPost(userRef){
      return this.firestore.collection('files',ref=>ref.where('pNo','==',userRef)).snapshotChanges();
    }
}

最佳答案

您正在 subscribe() 之外循环遍历 fileList,这意味着它实际上不会等待 Observable 被解析。尝试在 subscribe() 内部循环。

onDelete(pNo:string){ 
  this.fservice.getPost(pNo).subscribe(actionArray => {
    this.fileList = actionArray.map(item => {
      return {
        id: item.payload.doc.id,
        ...item.payload.doc.data()
      } as Files[];

      for(let i of this.fileList){
        this.storage.storage.refFromURL(i.path).delete();
        this.firestore.doc("files/"+i.id).delete();
      }
    })
  });
}

此外,您可能希望将订阅结果标记为作为文件[],而不是作为文件

关于node.js - undefined 不可迭代(无法读取属性 Symbol(Symbol.iterator)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56267722/

相关文章:

node.js - 在 Appfog 上部署基于 Deployd (deployd.com) 的 Node.js 应用程序

angular - 使用 Angular 5 中的 contentChildren 获取多个 ng-template ref 值

javascript - 同一根上的路由器链接中的 Angular 6 冲突

javascript - 无法加载资源:net::ERR_CONNECTION_REFUSED 从本地主机获取时

javascript - Node中setTimeout实现异步

angular - 使用扩展面板对我的 Angular Material 数据表进行单元测试无法运行或检测不到动画完成?

javascript - 使用 Typescript 将数组写入文本文件并换行

javascript - 参数无法访问 - [ts] 找不到名称 'product'

javascript - 膝盖 : what is the appropriate way to create an array from results?

angular - 如何从远程 API 服务填充 Material 选择下拉列表?