如何从firebase查询返回任何类型的可观察对象

如何从firebase查询返回任何类型的可观察对象,firebase,firebase-realtime-database,observable,Firebase,Firebase Realtime Database,Observable,我在应用程序中使用firebase实时数据库进行聊天功能,我只需要从firebase query返回类型为any或类型为Message的Obserable, 这是我的密码: getMessageHistory(farmerId) { let chatMessages = []; var chats; firebase.database().ref('/' + this.chatUrl + '/' + farmerId + '/'

我在应用程序中使用firebase实时数据库进行聊天功能,我只需要从firebase query返回类型为any或类型为Message的Obserable, 这是我的密码:

        getMessageHistory(farmerId) {

        let chatMessages = [];
        var chats;

        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
                    }


                    let mockedHistory: Array<Message>;
                    mockedHistory.push(Message)
                });

            }
            else {
            }

        });
    }`
getMessageHistory(farmerId){
让聊天信息=[];
var聊天;
firebase.database().ref('/'+this.chatUrl+'/'+farmerId+'/')。一次('value',函数(快照){
chats=snapshot.val();
如果(聊天!=null){
Object.keys(chats.forEach)(元素=>{
let chat=chats[element.toString()];
var消息={
fromId:chat.from,
toId:chat.to,
留言:chat.message
}
让mockedHistory:数组;
mockedHistory.push(消息)
});
}
否则{
}
});
}`

如何从上面的方法返回可观察的。我尝试过angularfire2,但在编译(AngularVersion 4)时抛出了一个错误。

得到了解决方案,但我不知道是否推荐它

 let mockedHistory: Array<Message> = [];
    let totalRecords = this.db.list('/' + this.chatUrl + '/' + userId + '/');

    return totalRecords.valueChanges<any>().map((chat)=>{
        var newChat = chat.map((message) => {
            let msg = new Message();
            msg.fromId = message.from;
            msg.toId= message.to,
            msg.message= message.message
            return msg;
        });
        return newChat;
      }
    )
让mockedHistory:Array=[];
让totalRecords=this.db.list('/'+this.chatUrl+'/'+userId+'/');
返回totalRecords.valueChanges().map((聊天)=>{
var newChat=chat.map((消息)=>{
让msg=新消息();
msg.fromId=message.from;
msg.toId=message.to,
msg.message=message.message
返回味精;
});
返回newChat;
}
)