Я хочу вернуть один объект из моей базы данных Firebase с наивысшим рейтингом качества за последние 7 дней. Я использую следующий код Typescript, чтобы, во-первых, запросить все потоки, созданные за последние семь дней, и, во-вторых, извлечь поток с самым высоким значением в 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
, выполните преобразование в функции сопоставления и верните преобразованное значение, если вы хотите сделать что-то асинхронное, используйтеflatMap
- с помощью этого оператора вы можете сопоставить другие наблюдаемые. - person Balázs Édes   schedule 01.02.2017