У меня есть служба в Angular со следующим методом, который выбирает данные из Firebase:
getMatchesFiltered(matchId: string, filter: string, sortDirection: string, pageIndex: number, pageSize: number){
return this.db.object('/matches');
}
Возвращает наблюдаемую базу данных, к которой я могу применить pipe
и subscribe
, например,
this.dbService.getMatchesFiltered(matchId, filter, sortDirection, pageIndex, pageSize).pipe(
catchError(()=> of([])),
finalize(()=>this.loadingMatches.next(false))
)
.subscribe(matches => {
let results = [];
let json_data = matches;
for(var i in json_data){
if(json_data[i].matchDeets){
results.push([i, json_data[i].matchDeets][1]);
}
}
this.matchesSubject.next(results);
});
Однако, когда я вместо этого пытаюсь вернуть Запрос из службы базы данных, возвращаемый объект больше не является Наблюдаемым:
getMatchesFiltered(matchId: string, filter: string, sortDirection: string, pageIndex: number, pageSize: number){
let ref = firebase.database().ref("/matches");
return ref.limitToFirst(pageSize);
}
ОШИБКА в src / app / matchDataSource.model.ts (29,106): ошибка TS2339: свойство 'pipe' не существует в типе 'Query'
Документация, по-видимому, не готова к тому, как обработать запрос способоманалогично наблюдаемой.
Например, я мог бы делать вещи после получения DataSnapshot а-ля:
ref.orderByKey().endAt("pterodactyl").on("child_added", function(snapshot) {
console.log(snapshot.key);
});
Но значит ли это, что мне придется добавить часть .on("child_added", function(snapshot) {});
вмой компонент, вместо того, чтобы держать его красиво завернутым в сервис?
Итак, я думаю, у меня есть следующие проблемы:
Я не знаю, как правильно разделить / инкапсулировать это.
Я не знаю, как справиться с тем, что команда pipe делает с запросом из файла component.ts, если я должен прибегнуть к этому.
Я не знаюупускаю ли я какой-то очень простой и понятный способ заставить запрос вести себя аналогично Observable.
Рад предоставить рабочий пример от github, если это будет необходимо.