为什么订阅 Observable 返回 FireStore 文档快照列表我无法构建正确的对象列表?我获得未定义的对象
Why subscribing an Observable returning a list of FireStore document snapshot I can't build a proper list of objects? I obtain undefined objects
我正在与 AngularFire 打交道 Angular 项目试图在 FireStore 数据库上执行查询以检索集合中的所有文档和相关的 UID。
基本上我有以下几种情况:
因此,如您所见,目前我只有一个名为 calendar 的集合,其中包含一些文档,其中每个文档代表日历上的一个事件(但现在这个细节并不那么重要)。
在我的 Angular 应用程序中,我有一个服务 class 包含此方法,该方法仅使用 snapshotChanges()[ 执行查询以检索日历集合中的所有文档=37=] 方法以获得整个快照,包括 UID 和 data:
getEvents(): Observable<any[]> {
this.items = this.db.collection('calendar').snapshotChanges();
return this.items;
}
然后进入组件的 TypeScript 代码,我订阅了前一个方法返回的 Observable 对象,以便构建一个包含 UID 和数据的对象。我是这样做的:
this.eventService.getEvents().subscribe(eventsSnaps => {
this.events = eventsSnaps.map(currentCourseSnap => {
console.log("DOCUMENT ID: ", currentCourseSnap.payload.doc.id);
var currentCourse = {
id: currentCourseSnap.payload.doc.id,
...currentCourseSnap.payload.doc.data
}
})
console.log("EVENTS FROM SNAPS: ", this.events);
});
我在这里得到了一个奇怪的行为。
第一个 console.log() 正确打印从 FireStore 获取的所有文档的检索 UID,但第二个 consle.log() 打印整个构建对象数组检索 undefined,在我的 Chrome 控制台中,我得到了这个输出:
EVENTS FROM SNAPS: (16) [undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined]
为什么它不能正确构建我的对象?怎么了?我错过了什么?我该如何解决这个问题?
当花括号包含在箭头函数中时,return
语句应明确声明。尝试以下
this.eventService.getEvents().subscribe(eventsSnaps => {
this.events = eventsSnaps.map(currentCourseSnap => {
console.log("DOCUMENT ID: ", currentCourseSnap.payload.doc.id);
var currentCourse = {
id: currentCourseSnap.payload.doc.id,
...currentCourseSnap.payload.doc.data
};
return currentCourse; // <-- return the object here
});
console.log("EVENTS FROM SNAPS: ", this.events);
});
this.eventService.getEvents().subscribe(eventsSnaps => {
this.events = eventsSnaps.map(currentCourseSnap => ({
id: currentCourseSnap.payload.doc.id,
...currentCourseSnap.payload.doc.data
}));
console.log("EVENTS FROM SNAPS: ", this.events);
});
以上类似写作
this.eventService.getEvents().subscribe(eventsSnaps => {
this.events = eventsSnaps.map(currentCourseSnap => {
return {
id: currentCourseSnap.payload.doc.id,
...currentCourseSnap.payload.doc.data
}
}
});
console.log("EVENTS FROM SNAPS: ", this.events);
});
我正在与 AngularFire 打交道 Angular 项目试图在 FireStore 数据库上执行查询以检索集合中的所有文档和相关的 UID。
基本上我有以下几种情况:
因此,如您所见,目前我只有一个名为 calendar 的集合,其中包含一些文档,其中每个文档代表日历上的一个事件(但现在这个细节并不那么重要)。
在我的 Angular 应用程序中,我有一个服务 class 包含此方法,该方法仅使用 snapshotChanges()[ 执行查询以检索日历集合中的所有文档=37=] 方法以获得整个快照,包括 UID 和 data:
getEvents(): Observable<any[]> {
this.items = this.db.collection('calendar').snapshotChanges();
return this.items;
}
然后进入组件的 TypeScript 代码,我订阅了前一个方法返回的 Observable 对象,以便构建一个包含 UID 和数据的对象。我是这样做的:
this.eventService.getEvents().subscribe(eventsSnaps => {
this.events = eventsSnaps.map(currentCourseSnap => {
console.log("DOCUMENT ID: ", currentCourseSnap.payload.doc.id);
var currentCourse = {
id: currentCourseSnap.payload.doc.id,
...currentCourseSnap.payload.doc.data
}
})
console.log("EVENTS FROM SNAPS: ", this.events);
});
我在这里得到了一个奇怪的行为。
第一个 console.log() 正确打印从 FireStore 获取的所有文档的检索 UID,但第二个 consle.log() 打印整个构建对象数组检索 undefined,在我的 Chrome 控制台中,我得到了这个输出:
EVENTS FROM SNAPS: (16) [undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined]
为什么它不能正确构建我的对象?怎么了?我错过了什么?我该如何解决这个问题?
当花括号包含在箭头函数中时,return
语句应明确声明。尝试以下
this.eventService.getEvents().subscribe(eventsSnaps => {
this.events = eventsSnaps.map(currentCourseSnap => {
console.log("DOCUMENT ID: ", currentCourseSnap.payload.doc.id);
var currentCourse = {
id: currentCourseSnap.payload.doc.id,
...currentCourseSnap.payload.doc.data
};
return currentCourse; // <-- return the object here
});
console.log("EVENTS FROM SNAPS: ", this.events);
});
this.eventService.getEvents().subscribe(eventsSnaps => {
this.events = eventsSnaps.map(currentCourseSnap => ({
id: currentCourseSnap.payload.doc.id,
...currentCourseSnap.payload.doc.data
}));
console.log("EVENTS FROM SNAPS: ", this.events);
});
以上类似写作
this.eventService.getEvents().subscribe(eventsSnaps => {
this.events = eventsSnaps.map(currentCourseSnap => {
return {
id: currentCourseSnap.payload.doc.id,
...currentCourseSnap.payload.doc.data
}
}
});
console.log("EVENTS FROM SNAPS: ", this.events);
});