Firebase orderByChild无法在Javascript中运行

时间:2017-11-06 16:18:08

标签: javascript firebase firebase-realtime-database

我想得到我的firebase节点的有序列表

inboxMessageFetch(mobileNumber, firebaseToken) { 
    return firebase.database().ref(`messaging/${mobileNumber}/inbox`).orderByChild("time")
        .on('value', snapshot => {
            if (snapshot.exists()) {
                this.inboxMessages = snapshot.val();
                console.log('FB', this.inboxMessages);
            }
        });
}

这是我的数据库 enter image description here

1 个答案:

答案 0 :(得分:3)

对Firebase数据库执行查询时,可能会有多个结果。因此快照包含这些结果的列表。即使只有一个结果,快照也会包含一个结果的列表。

您在回调中收到的快照包含所有项目的键和值,以及有关其相对排序的信息。当你不幸地打电话给snapshot.val()时,订购的信息就会丢失。

您的代码需要考虑到这一点,并应使用snapshot.forEach()按请求的顺序循环结果:

inboxMessageFetch(mobileNumber, firebaseToken) { 
  firebase.database().ref(`messaging/${mobileNumber}/inbox`).orderByChild("time")
    .on('value', snapshot => {
        this.inboxMessages = [];
        snapshot.forEach((messageSnapshot) {
            console.log(messageSnapshot.key, messageSnapshot.val();
            this.inboxMessages.push(messageSnapshot.val());
        });
        console.log(this.inboxMessages);
    });
}