首页 > 解决方案 > “返回时超出最大调用堆栈大小”与“void 类型不存在订阅”冲突

问题描述

我通过在 firestore 服务上的 get 函数上添加 return 来修复“类型 void 上不存在订阅”。但是,出现了另一个问题,即“返回时超出了最大调用堆栈大小”。

我试图修复它们中的任何一个,但导致另一个问题

firestore.service.ts

public getRoom() {
    this.rooms = this.afs
      .collection('Room')
      .snapshotChanges()
      .pipe(
        map(changes => {
          return changes.map(a => {
            const data = a.payload.doc.data() as Room;
            data.id = a.payload.doc.id;
            return data;
          });
        })
      );

//Maximum call stack size exceeded when i added return here
    return this.getRoom().map(response => response.json());
  }

组件.ts

  ngOnInit() {
//subscribe does not exist on type void came up when no return on get
    this.firestore.getRoom().subscribe((room: Room[]) => {
      this.arr = room;
      console.log(this.arr);
    });
  }

标签: angulartypescriptreturngoogle-cloud-firestoresubscribe

解决方案


递归调用 getRoom() 函数的问题。您在 getRoom() 中调用 getRoom();

将自调用线路删除为 -

public getRoom() {
    return this.rooms = this.afs
      .collection('Room')
      .snapshotChanges()
      .pipe(
        map(changes => {
          return changes.map(a => {
            const data = a.payload.doc.data() as Room;
            data.id = a.payload.doc.id;
            return data;
          });
        })
      );

   //Maximum call stack size exceeded when i added return here
   //return this.getRoom().map(response => response.json());
  }

推荐阅读