2016-05-23 69 views
0

我试图从离子中的所有用户(无需特定用户标识)中检索帖子。我可以从数据库中的第一位用户那里获取所有帖子,但是在从其他用户获取帖子时遇到问题。从Ionic的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; 
}; 

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

回答

1

您无法为单个承诺调用多个解决方案。该承诺正在第一次循环迭代中解决,然后其他人被忽略。

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

var values = []; 

    snapshot.forEach(function(childSnapshot) { 

     childSnapshot.forEach(function(grandchildSnapshot) { 
      values.push(grandchildSnapshot); 

     }) 
    }) 
    promise.resolve(values) 
+0

非常感谢!这解决了我的问题。值得注意的是,起初我没有正确地获取数据,但在更改下一行后,它完美地工作: values.push(grandchildSnapshot); values.push(grandchildSnapshot.val()); – dms