Я хочу создать массив объектов со значениями, полученными в моей базе данных Firebase в реальном времени.
Для этого я использую библиотеку AngularFire.
У меня есть 4 функции, которые я использую для возврата значений в мой массив, но когда я пытаюсь это сделать, все значения не определены.
Это мой код:
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
})
}
Как видите, я пытаюсь использовать асинхронный / жду в первой функции, но ничего не изменится ...
Я что-то не так сделал? Мне нужна ваша помощь, я потерян уже 2 недели ...
Спасибо всем!
PS: функция "getChats ()" вызывается при инициализации.