我正在我的项目中实现聊天功能,并且已经使用了聊天library,并且作为聊天数据库,我使用的是Firebase实时数据库。
有两种方法:一种是getMessageHistory()
[用于获取用户消息的消息历史记录],另一种是getMessageHistoryFromFirebase()
[用于从FIREBASE获取用户消息的消息历史 - 时间数据库]
问题:当我在getMessageHistoryFromFirebase()
中调用getMessageHistory()
方法时,它会被调用,但会被调用很晚,并且父方法的当前执行已达到结束。
如何从firebase获取数据(通过getMessageHistoryFromFirebase()
方法),然后用firebase数据库填充mockedHistory
数组?
即使我知道方法早期被调用,并且在初始化时当前列表为空:
每一个回复都将受到高度赞赏!
班级档案:
父方法:
getMessageHistory(userId: any): Observable<Message[]> {
let firebaseMessages = this.getMessageHistoryFromFirebase(userId);
let mockedHistory: Array<Message>;
mockedHistory = firebaseMessages;
// mockedHistory = [
// {
// fromId: userId,
// toId: userId,
// message: "Hi there, just type any message bellow to test this Angular module."
// }
// ];
return Observable.of(mockedHistory);
}
儿童方法:
getMessageHistoryFromFirebase(farmerId) : any{
let chatMessages = [];
var chats;
var database = firebase.database();
firebase.database()
.ref('/' + this.chatUrl + '/' + farmerId + '/')
.once('value', function (snapshot) {
chats = snapshot.val();
if (chats != null) {
Object.keys(chats).forEach(element => {
let chat = chats[element.toString()];
var Message = {
fromId : chat.from,
toId:chat.to,
message: chat.message
}
chatMessages.push(Message)
});
}
});
return chatMessages;
}
如果我在for循环的帮助下在列表中添加了一些元素但没有承诺,那么它可以正常工作。