我正在尝试查询我的数据库,以便它检索基于子键的有序列表。我按如下方式执行(见下文),但没有任何反应,这意味着它返回一个对象,其排序方式与它存储在 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/