Как получить простую строку из коллекции в firebase firestore в угловом проекте - PullRequest
0 голосов
/ 28 марта 2019

Я пытаюсь получить поле из пожарного магазина Firebase в проекте angular7, а затем сохранить его в строковой переменной.Мне нужно использовать функцию «где», но она заставляет меня использовать наблюдаемые и, будучи новичком в angular, я не могу понять, как извлечь нужную строку.

Я провел исследование, в результате которого я получил предоставленный код, но безуспешно, что я хочу достичь.Как опытный разработчик SQL, это действительно расстраивает.

getUserPrivilegeByUserId(uid:string){
    var data;
     this.db.collection('users', ref => { return ref.where('uid','==',uid)}).snapshotChanges().subscribe(result => {  
      result.forEach(doc =>{
        data = doc.payload.doc.get("privileges");
      })
     }
    );
    return data;
  }

1 Ответ

0 голосов
/ 28 марта 2019

Работа с Observables является асинхронной, поэтому в вашем примере это «возврат данных»;строка будет выполнена задолго до того, как «data = doc.payload.doc.get (« привилегии »);»

Если метод getUserPrivilegeByUserId () находится в компоненте , то для решения этой проблемы необходимо установить данные как свойство компонента, а затем обновить его в подписке., например:

  data: string;

  ...

  getUserPrivilegeByUserId(uid:string){
    this.db.collection('users', ref => { return ref.where('uid','==',uid)}).snapshotChanges().subscribe(result => {  
      result.forEach(doc =>{
        this.data = doc.payload.doc.get("privileges");
      })
     }
    );
  }

Если, с другой стороны, метод getUserPrivilegeByUserId () находится в службе , вы можете вернуть Observable из службы следующим образом:

  import { map } from 'rxjs/operators';

  ...

  getUserPrivilegeByUserId(uid:string): Observable<string>{
    return this.db.collection('users', ref => { return ref.where('uid','==',uid)}).snapshotChanges()
      .pipe(
        map(result => {  
          var data;
          result.forEach(doc =>{
            data = doc.payload.doc.get("privileges");
          });
          return data;
         })
      );

И тогда в вашем компоненте вы будете делать что-то вроде:

  data: string;

  ...

  this.userService.getUserPrivilegeByUserId(uid).subscribe(data => this.data = data);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...