有一些如何实现以下的实际问题 . 我有一个带有函数的服务,该函数返回带有键的事件列表 . 然后,我想将此密钥传递给另一个函数,该函数返回更详细的对象,在其他数据中,如消息数和所有者信息 . 然后我在组件中订阅 .
目前我正在使用带有forEach的.map运算符,然后订阅以获取其他信息 . 我想我需要使用switchMap(删除内部订阅),但不能让我的生活让这个工作 . 还试过flatMat,MergeMap,forkJoin和Observable.from,但只是让自己感到困惑 . 代码的相关开始如下
return this.afs.collection<Event>(`users/${this.currentFirebaseUserObj.uid}/eventsByUser`)
.valueChanges()
.map((allEvents) => {allEvents.forEach(event =>{
现在我想返回 getCompleteEvent()
函数的结果,该函数返回一个类型为Event的Observable来替换上面的事件对象,我想我需要订阅这个,但是如何返回第二个调用的结果并替换第一个事件对象即
this.getCompleteEvent(event.key).subscribe(completeEvent => {
return completeEvent
}
另一方面,我可以通过不同的函数将特定字段添加到forEach中的事件对象,但是希望 getComplete
函数在订阅后返回整个对象,即
event.userOwnerObj = this.getUserObject(event.ownerId);
event.noOfMessage = this.getNoOfMessages(event.key);
感觉就像一团糟,不确定构建这部分的最佳方法 .
1 回答
我不确定我是否清楚一切,但这可能有所帮助 .
让我们假设一下
返回一个Observable,它发出一个包含所有事件的集合,至少在它们的初始配置中,即使用密钥而不是所有细节 .
如果是这种情况,请考虑此代码
这将返回一个流,该流为
allEvents
中找到的每个事件发出 . 现在,对于每个事件,您都可以运行this.getCompleteEvent(event.key)
,它返回完整事件的Observable .现在,您使用
mergeMap
运算符(以前称为flatMap
)来查看Observables流并获取完整事件流 . 这意味着