【发布时间】:2017-06-17 13:47:31
【问题描述】:
我想从我的 Firebase 数据库中返回一个在过去 7 天内质量评级最高的对象。我正在使用以下 Typescript 代码,首先,查询过去 7 天内创建的所有线程,其次,提取在 quality 处具有最高值的线程。理想情况下,我可以将 results 可观察对象“转换”为 forEach 语句的最终迭代对象。
highestWeek: Number = 0;
...
getWeeksBest(): Observable<any> {
let now = Date.now() / 1000;
let results = this.af.database.list('/threads', {
query: {
orderByChild: 'created',
startAt: now - 604800 //One week ago
}
})
.map(results => {
results.forEach(result => {
if (result.quality > this.highestWeek) {
console.log(result) //Logs next highest quality thread
this.highestWeek = result.quality
}
})
})
results.subscribe(results => console.log(results)) //Undefined
return results //Undefined
}
【问题讨论】:
-
在您的
.map中,您并没有改变结果,而是产生了副作用。如果您可以立即转换results,请在映射函数中进行转换并return 转换后的值,如果您想做异步操作,请使用flatMap- 使用该运算符,您可以映射到其他可观察对象。
标签: angular typescript rxjs angularfire2 angular2-observables