Каков аналогичный способ обработки канала и подписки на объект запроса Firebase? - PullRequest
0 голосов
/ 09 июня 2018

У меня есть служба в 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) {}); вмой компонент, вместо того, чтобы держать его красиво завернутым в сервис?

Итак, я думаю, у меня есть следующие проблемы:

  1. Я не знаю, как правильно разделить / инкапсулировать это.

  2. Я не знаю, как справиться с тем, что команда pipe делает с запросом из файла component.ts, если я должен прибегнуть к этому.

  3. Я не знаюупускаю ли я какой-то очень простой и понятный способ заставить запрос вести себя аналогично Observable.

Рад предоставить рабочий пример от github, если это будет необходимо.

1 Ответ

0 голосов
/ 13 июня 2018

Woudn; t можно поместить в Observable:

Observable.create(function(observer) {
    ref.orderByKey().endAt("pterodactyl").on("child_added", snapshot => 
    {
        observer.next(snapshot.key);
    });
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...