Получить значения карты на angular / Typescript - PullRequest
0 голосов
/ 26 мая 2020

Я пытаюсь получить значения карты:

UtilisateursService.ts

 getIntervenants():Map<string,string> {
          let IdDisplayNameInt = new Map();

          firebase.database().ref("/users").orderByKey().once("value")
            .then(function(snapshot) 
                    {
                      snapshot.forEach(function(childSnapshot) 
                      {

                          IdDisplayNameInt.set(childSnapshot.val().UserId,childSnapshot.val().firstName + " " +childSnapshot.val().lastName);
                      }

                      )
                     }); 
          return IdDisplayNameInt;
          }

в new-cl-component.ts у меня есть:

this.intervenantsList=this.userService.getIntervenants();
    console.log("this.intervenantsList = ",this.intervenantsList);

    console.log("this.intervenantsList.values =  ",this.intervenantsList.values());


    for (var valeur of intervenantsList.values()) {
      console.log("valeur = ",valeur);
        this.DisplayNameIntervenants.push(valeur)    }

        console.log("this.int = ",this.DisplayNameIntervenants)    ;

Карта intervenantsList содержит все данные, которые мне нужны,

this.intervenantsList, но когда я пытаюсь отобразить intervenantsList.values ​​(), он пуст: map.values

Я пробовал с картой basi c, и она работает

let map = new Map();
        map.set("A",1);
        map.set("B",2);
        map.set("C",3);
        console.log("map = ",map);
        console.log("map.values= ",map.values());---- returns 1,2,3

1 Ответ

1 голос
/ 26 мая 2020

getIntervenants() функция пытается синхронно вернуть асинхронные данные. Переменная IdDisplayNameInt назначается внутри функции асинхронно. Вам также нужно вернуть значение асинхронно. Один из способов - использовать Rx JS Subject. Попробуйте следующее

Сервис

import { Observable, Subject } from 'rxjs';

getIntervenants(): Observable<Map<string,string>> {
  let result = new Subject<Map<string,string>>();

  firebase.database().ref("/users").orderByKey().once("value")
    .then((snapshot) => {
      let IdDisplayNameInt = new Map();
      snapshot.forEach((childSnapshot) => {
        IdDisplayNameInt.set(childSnapshot.val().UserId,childSnapshot.val().firstName + " " +childSnapshot.val().lastName);
      });
      result.next(IdDisplayNameInt);
    });

  return result.asObservable();
}

Затем вам нужно подписаться на функцию getIntervenants() в компоненте

this.userService.getIntervenants().subscribe(
  intervenants => { 
    this.intervenantsList = intervenants;
    console.log("this.intervenantsList = ", this.intervenantsList);
    console.log("this.intervenantsList.values =  ", this.intervenantsList.values());
    for (var valeur of intervenantsList.values()) {
      console.log("valeur = ",valeur);
      this.DisplayNameIntervenants.push(valeur);
    }
    console.log("this.int = ", this.DisplayNameIntervenants);
  }
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...