Angular Firebase не получает результаты в реальном времени, console.log сообщает undefined - PullRequest
0 голосов
/ 05 мая 2020

Я не могу получить данные в реальном времени из облачного хранилища. Если я делаю console.log вместо того, чтобы вернуться в службу, и просто вызываю функцию (не подписываюсь на нее), она работает.

Это код в моем файле chatService

    getRealTimeChats(): any {
    this.db.collection('chats').onSnapshot(querySnapshot => {
      const chat: ChatModel[] = [];
      querySnapshot.forEach(doc => {
        const data = doc.data() as ChatModel;
        chat.push(data);
      });
      return chat;
    });
}

Ниже это код в моем файле chat.ts

this.chatService.getRealTimeChats().subscribe((chats: ChatModel[]) => {
      this.chats = chats;
});

1 Ответ

0 голосов
/ 05 мая 2020

Метод onSnapshot получает обратный вызов при загрузке данных. Вы не можете вернуть значение, потому что его никто не получит. Кроме того, ваш getRealTimeChats не является наблюдаемым, поэтому вы не можете подписаться на него. Возможно, вы сможете вернуть пользовательский Observable. Примерно так

getRealTimeChats(): any {
    const subject = new Subject();
    const observable = subject.asObservable();

    this.db.collection('chats').onSnapshot(querySnapshot => {
        const chat: ChatModel[] = [];
        querySnapshot.forEach(doc => {
            const data = doc.data() as ChatModel;
            chat.push(data);
        });
        subject.next(chat);
    });

    return observable;   
}

и при вызове:

this.chatService.getRealTimeChats().subscribe((chats: ChatModel[]) => {
      this.chats = chats;
});
...