【问题标题】:Retrieving children from children in firebase with Ionic使用 Ionic 从 Firebase 中的儿童中检索儿童
【发布时间】:2016-05-23 10:28:00
【问题描述】:

我正在尝试从 Ionic 中的所有用户那里检索帖子(没有特定的用户 ID)。我可以从数据库中的第一个用户那里获取所有帖子,但是在从其他用户那里获取帖子时遇到了麻烦。

这是我的 firebase 结构的简化版本:

"posts_meta" : {

   "uid" : {

     "post-id" : {
        "title": "",
        "content": ""
     },
   },

   "uid" : {

     "post-id" : {
        "title": "",
        "content": ""
     },
     "post-id" : {
        "title": "",
        "content": ""
     },
   }

在这里,我尝试先遍历用户,然后使用嵌套的 foreach 遍历每个用户的帖子:

.factory('Timeline', function($q, Profile, Utils, Codes) {

var self = this;

self.getAllPosts = function() {
    var qGet = $q.defer();
    var ref = new Firebase(FBURL);

    ref.child("posts_meta").once("value", function(snapshot) {

        snapshot.forEach(function(childSnapshot) {

            childSnapshot.forEach(function(grandchildSnapshot) {
                qGet.resolve(grandchildSnapshot.val());
            })
        })
}, function (error) {
        Codes.handleError(error);
        qGet.reject(error);
    });
    return qGet.promise;
};

我做错了什么?我错过了什么吗?

【问题讨论】:

    标签: angularjs ionic-framework firebase firebase-realtime-database


    【解决方案1】:

    您不能为单个 Promise 调用多个解析。承诺在第一次循环迭代中被解决,然后其他被忽略。

    您可以尝试将所有孙辈保存到一个数组中,但我相信 firebase 有办法以更好的性能解决这个问题。

        var values = [];
    
        snapshot.forEach(function(childSnapshot) {
    
            childSnapshot.forEach(function(grandchildSnapshot) {
                values.push(grandchildSnapshot);
    
            })
         })
         promise.resolve(values)
    

    【讨论】:

    • 非常感谢!这解决了我的问题。值得注意的是,起初我没有正确获取数据,但在更改下一行后它工作得很好: values.push(grandchildSnapshot);到 values.push(grandchildSnapshot.val());
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-07
    相关资源
    最近更新 更多