let obj = {"a": 3, "b": 2, "6": "a"}
Object.keys(obj).map((item) => {console.log("item", obj[item])})
// a
// 3
// 2
Работа с 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);