Angular ';返回时超过最大调用堆栈大小';与'冲突;订阅在类型void'上不存在;

Angular ';返回时超过最大调用堆栈大小';与'冲突;订阅在类型void'上不存在;,angular,typescript,return,google-cloud-firestore,subscribe,Angular,Typescript,Return,Google Cloud Firestore,Subscribe,我通过在firestore服务上添加get函数时的return,修复了“订阅在类型void上不存在”的问题。然而,出现了另一个问题,即“返回时超出了最大调用堆栈大小” 我试图修复其中任何一个,但导致了另一个问题 firestore.service.ts public getRoom() { this.rooms = this.afs .collection('Room') .snapshotChanges() .pipe( map(ch

我通过在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());
  }
组件技术

  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);
    });
  }

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());
  }

谢谢!当我删除此行时,出现了另一个问题“订阅不存在于类型void上”,您是否添加了回答中提到的
return this.rooms=this.afs
对不起,我没有注意到,非常感谢!现在修好了