Как поместить данные sh в BehaviourSubject в Typescript? - PullRequest
1 голос
/ 03 мая 2020

В моем приложении Ioni c / Angular я пытаюсь получить данные из firestore, используя следующий код:

private _users = new BehaviorSubject<User[]>([]);

return of(
    firebase.firestore().collection("users").get()
        .then((docs) => {
            docs.forEach((doc) => {
                this._users.push(doc);
            });
        }).catch((err) => {
     console.log(err);
    })
);

Но я получаю эту ошибку, когда пытаюсь скомпилировать:

Property 'push' does not exist on type 'BehaviorSubject<User[]>'.

Может кто-нибудь сказать мне, как я могу получить данные из этой коллекции и заполнить ее _users?

Ответы [ 4 ]

1 голос
/ 03 мая 2020

Вы можете получить свойство коллекции, выделенное BehaviorSubject, которое называется value:

docs.forEach((doc) => {
   this._users.next([...this._users.value, doc]);
});

Но похоже, что вы можете просто обновить весь массив:

.then((docs) => {
  this._users.next(docs);
})

Также , не забудьте конвертировать DocumentData в User объект, например:

interface User {
  id: string;
  name: string;
}

.then((docs) => {
  this._users.next(docs.map(doc => {
    const data = doc.data() as User;
    return { id: doc.id, name: data.name };
  });
})
0 голосов
/ 03 мая 2020

pu sh не будет работать, поскольку users не является Array . Используйте next:

this._users.next(doc);

Более подробную информацию можно найти в документах .

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

Вы не можете использовать pu sh с наблюдаемыми, вы можете исправить это

 this._users.next(doc);
0 голосов
/ 03 мая 2020

Вы должны использовать next вместо pu sh

 this._users.next(doc);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...