【发布时间】:2020-10-14 15:23:12
【问题描述】:
我有一个对象数组,我们会说它是关闭类型Objects[]。
我需要将每个对象映射到另一种类型的对象,例如,DestinationObject[] 但是DestinationObject[] 上有一个属性,我需要在 Firebase 中查找,所以我需要订阅,或者 @ 987654324@.
不幸的是,如果我进行订阅,我会返回一个订阅,如果我执行pipe(map()),我会得到一个可观察对象列表,而不是可观察对象列表(即我想要Observable<Object[]> 而不是Observable<Object>[]
代码如下:
processUsers(users: Users[], groupUsers: Users[]): Observable<MappedUser[]> {
return groupUsers.map(groupUser => {
return this.firebaseService.SubscribableFunction(groupUser.id).pipe(map(array => {
return {
name: groupUser.name,
arrayLength: array.length,
} as MappedUser;
}));
});
}
所以两个简单的数组对象,我们确实返回了一个 MappedUser,但是由于 SubscribableFunction 上的 pipe(map()),它返回一个 Observable,因此第一行的映射返回一个 Observable 列表。这不是我想要的。
你有什么解决办法吗?我已经尝试过 map、mergeMap、from() of(),但它似乎没有按预期工作。
更新 这是请求的可订阅函数:
SubscribableFunction(userId: string): Observable<Equipment[]> {
const collection = this.afs.collection<Equipment>('equipment', ref => ref.where('userId', '==', userId));
return collection.snapshotChanges().pipe(map(items => {
return items.map(item => {
return {
id: item.payload.doc.id,
...item.payload.doc.data(),
} as Equipment;
});
}));
}
【问题讨论】: