2016-05-23 71 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