I want to create an array of objects with values retrieved in my firebase real time database.
For that, I use AngularFire library.
I have 4 functions that I use for return values into my array, but when I try to do it, all values are undefined.
This is my code :
getChats(){
this.path = '/Users/' + this.uid;
this.sub1 = this.CrudService.all(this.path + '/Chats').subscribe((chats:any) =>{
if(chats.length){
for(let i = 0; i < chats.length; i++){
this.chats[i] = {};
this.chats[i].chatID = chats[i].chatID;
this.chats[i].contenderPicture = this.getContenderImg(chats[i].contenderID);
this.chats[i].firstLetterName = this.getContenderNameTruncated(chats[i].contenderID);
this.chats[i].lastMessage = this.getLastSentence(chats[i].chatID);
this.chats[i].lastTime = this.getLastSentenceHour(chats[i].chatID);
}
}
})
}
getContenderImg(contenderID:any){
var path = '/Users/' + contenderID + '/profile_picture/0/url';
this.sub1 = this.CrudService.read(path).subscribe(async picture => {
await picture
return picture
});
}
getContenderNameTruncated(contenderID:any){
var path = '/Users/' + contenderID + '/fname';
this.sub2 = this.CrudService.read(path).subscribe((fname:any) => {
var fnameLetter = fname.charAt(0);
var truncated = fname.replace(/./gi, '*');
var rmLastStar = truncated.slice(0, -1);
var nameTruncated = fnameLetter + rmLastStar
return nameTruncated
});
}
getLastSentence(chatID:any){
var path = '/Chats/' + chatID + '/lastMessage';
this.sub3 = this.CrudService.read(path).subscribe((lastMessage:any) => {
return lastMessage
});
}
getLastSentenceHour(chatID:any){
var path = '/Chats/' + chatID + '/lastTime';
this.sub4 = this.CrudService.read(path).subscribe(lastTime => {
return lastTime
})
}
As you can see, I've try to use async/await in the first function, but nothing change ...
Did I do something wrong ? I need your help, I am lost since 2 weeks now ...
Thank you all !
PS : "getChats()" function is called on init.