В моем ClassedataSource изначально у меня есть userId, у меня есть функция «MappingIdNameIntervenant», которая заменяет идентификаторы пользователя их lastNames + first Names. Источник данных сначала получает правильные значения, но когда я вызываю MappingIdNameIntervenant, данные не обновите правильно.
Вот мой код:
liste-classes.component.ts
ngOnInit()
{
this.classeService.getAllClasses().subscribe(
(Allclasses:Classe[]) => {
this.ClassedataSource=Allclasses;
this.classeService.MappingIdNameIntervenant(this.ClassedataSource).subscribe(
(mini:Classe[]) => {
**this.ClassedataSource=mini;**
console.log("this.ClassedataSource=",this.ClassedataSource); //doesn't display in console**
});
});
}
classe.service.ts
MappingIdNameIntervenant(cl:Classe[]):Observable<Classe[]>
{
let result = new Subject<Classe[]>();
for (let i=0;i<cl.length;i++)
{
for (let j=0;j<cl[i].intervenants.length;j++)
{
let usmap=new UtilisateursService();
usmap.getDisplayNameOfId(cl[i].intervenants[j]).subscribe((nameid) => {
cl[i].intervenants[j]=nameid;
});
}
console.log("cl in MappingIdNameIntervenant = ",cl); ///// i get data in console, but doesn't display in the interface
result.next(cl);
}
return result.asObservable();
}
Utilisateur.service.ts
getDisplayNameOfId(id:string):Observable<string>{
let gdnid = new Subject<string>();
firebase.database().ref("/users").orderByKey().once("value")
.then((snapshot) => {
let dni:string;
snapshot.forEach((childSnapshot) => {
if (childSnapshot.val().UserId === id){
dni=childSnapshot.val().firstName + " " +childSnapshot.val().lastName;
}
});
gdnid.next(dni);
});
return gdnid.asObservable();
}