javascript - orderByChild 在 Firebase 中不起作用

标签 javascript firebase firebase-realtime-database

我正在尝试查询我的数据库,以便它检索基于子键的有序列表。我按如下方式执行(见下文),但没有任何反应,这意味着它返回一个对象,其排序方式与它存储在 Firebase 数据库中的方式完全相同。这是怎么回事?

self.getAllProfiles = function () {
    var qProfile = $q.defer();
    var ref = new Firebase(FBURL);
    ref.child("users").orderByChild('last_update').on("value", function (snapshot) {
        console.log(snapshot.val()) // HERE IS WHERE IT SHOULD BE ORDERED
        qProfile.resolve(snapshot.val());
    }, function (errorObject) {
        qProfile.reject(errorObject);
    });
    return qProfile.promise;
};

要添加,我的用户节点如下所示:

users
   /$username
       /last_update
       /id
       /data
          /profile_image
          /display_name

这是一个快照:

Tester: Object
   github: Object
   last_update: 1447732462170
   userId: "github:12345"

最佳答案

当您调用 snapshot.val() 时,您将返回一个 JSON 对象。 JSON 对象中键的顺序由您的浏览器决定,而不是由 Firebase 决定。

为了让 child 按顺序使用快照的内置 forEach 方法:

self.getAllProfiles = function () {
    var qProfile = $q.defer();
    var ref = new Firebase(FBURL);
    ref.child("users").orderByChild('last_update').on("value", function (snapshot) {
        snapshot.forEach(function(child) {
            console.log(child.val()) // NOW THE CHILDREN PRINT IN ORDER
        });
        qProfile.resolve(snapshot.val());
    }, function (errorObject) {
        qProfile.reject(errorObject);
    });
    return qProfile.promise;
};

您可以将 q.resolve() 调用留在原处:snapshot.forEach() 不是异步调用。

关于javascript - orderByChild 在 Firebase 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33893866/

相关文章:

javascript - 带有 if else 语句的函数 - javascript

arrays - 使用 Int 对数组进行排序

android - Firebase 监听器代码未被触发

android - Firebase 的 Cloud Firestore 免费配额一旦超过就永久用完?

javascript - 将 firebase observables 与 angular2 结合起来

javascript - 来自返回的 JSON 的新 javascript 数组

javascript - 使用 XSS 改变服务器端已经存在的 javascript 文件

javascript - 使用 Javascript 循环切换 div 背景颜色 onClick

ios - FCM 后台通知在 iOS 中不起作用

android - FirebaseFirestoreException : Every document read in a transaction must also be written