How to assemble a list with the data of an Observable?

0

How to traverse the data from an observable and insert into a list?

I would like to put together a list of all the arrays it contains within the Observable that comes from the Cloud Firestore because I need a list of people to display in MatTableDataSource .

export interface Pessoa {
     nome: string;
     cidade: string;
}

    export MyClass {
        list_pessoa: Pessoa[] = [];
        pessoa: Observable<Pessoa[]>;

        constructor(){

    // Algo parecido como isso, mas que funcione!
    this.pessoa.forEach(v =>{
      const d = v.values()
      this.list_pessoa.push(d);
    })

    console.log(this.list_pessoa);

}
}

Output: list_people [ {'name': 'person1', 'city': 'city1'},
{'name': 'pesssoa2', 'city': 'city2'} ]

  • How best to go through the data that is inside the Observable and insert into a list of arrays?
asked by anonymous 18.01.2018 / 16:36

1 answer

0

You can do the iteration by signing up for the Observable response like this:

export interface Pessoa {
     nome: string;
     cidade: string;
}

export MyClass {
    list_pessoa: Pessoa[] = [];
    pessoa: Observable<Pessoa[]>;

    constructor(){

    this.pessoa
     .subscribe(res => this.list_pessoa = res);

    console.log(this.list_pessoa);
    }
}

Return method:

  getPessoas() {

    this.pessoasCol = this.afs.collection('pessoas', ref => ref.orderBy('nome', 'asc'));

    this.pessoas = this.pessoasCol.snapshotChanges().map(changes => {
      return changes.map(a => {
        const data = a.payload.doc.data() as Pessoa;
        data.id = a.payload.doc.id;
        return data;
      });
    });

    return this.pessoas;
  }

The method call is made as follows:

this.pessoa = this.providerPessoa.getPessoas();
    
18.01.2018 / 16:51