it's been three days and i'm still looking for a solution to this.
Basically i have a class attribute variable dataMapped which is going to be an array of course
i populate it inside getAllPersonnel() function
getAllPersonnel(){
    this.personnelService.getAllPersonnel().valueChanges().subscribe(
      data => {
        this.dataMapped = data ;
      })
  }
now i want to use the array variable this.dataMapped outside the getAllPersonnel() function.
i tried this :
ngOnInit() {
    this.getAllPersonnel();
    console.log(this.dataMapped); <== returns null
  }
but i get Undefined
the purpose of all of this is that i want to populate an angular material mat-table and i need to initialise the data source inside the constructor not inside the getAllPersonnel() function.
so instead of this :
getAllPersonnel(){
    this.personnelService.getAllPersonnel().valueChanges().subscribe(
      data => {
        data.forEach(personnel => {
          let personnelData :PersonnelData ; 
          personnelData = {
            image:personnel.image , 
            nom: personnel.nom,
            prenom: personnel.prenom,
            secteur: personnel.secteur,
            note: personnel.note,
            promotion: personnel.promotion
          }
          this.personnelDataArray.push(personnelData)
        })
        this.dataSource = new  MatTableDataSource<PersonnelData>(this.personnelDataArray);  <== i dont want the initialisation here
      }
    )
  }
i want the function to directly retrun an array filled with the subscription data so i can use it inside my constructor, something like this :
constructor(private personnelService : PersonnelService) { 
    this.getAllPersonnel();
    this.dataSource = new  MatTableDataSource<PersonnelData>(this.getAllPersonnel());
  } 
i'd be appreciative to any kind of help guys thank you .
