angular - “返回时超出最大调用堆栈大小”与“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);
});
}
解决方案
递归调用 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());
}
推荐阅读
- mongodb - MongoDB中集合的使用
- javascript - Vue Multiselect 不加载数据
- r - 在 R 中使用“reshape”将长格式转换为宽格式
- javascript - 指定的 GSHEET_JSON_URL 不包含 JSON
- flutter - Flutter:如何将动态列表添加到下拉列表?编辑#2
- php - Axios 在调用 Laravel API 时在反应中捕获响应
- python - 如何释放 multiprocessing.sharedctypes.RawValue 和 multiprocessing.sharedctypes.RawArray?
- cmake - Qt Creator + CMake 头文件和源文件分离
- javascript - 如何在javascript中过期后重新启动倒数计时器24小时?
- javascript - 如果我在 iframe 内单击,CSS a:focus “忘记”最后一个位置