Как получить простую строку из коллекции в firebase firestore в угловом проекте

let obj = {"a": 3, "b": 2, "6": "a"}

Object.keys(obj).map((item) => {console.log("item", obj[item])})

// a
// 3
// 2
0
задан Emanuel Silva 28 March 2019 в 05:52
поделиться

1 ответ

Работа с 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);
0
ответ дан SnorreDan 28 March 2019 в 05:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: