2016-05-23 34 views
0

Ionic(特定のユーザーIDを持たない)のすべてのユーザーから投稿を取得しようとしています。データベースの最初のユーザーからすべての投稿を取得できますが、他のユーザーから投稿を取得することに問題があります。Ionicでファイアベースの子供から子供を取得する

これは私のfirebase構造の簡易版である:

"posts_meta" : { 

    "uid" : { 

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

    "uid" : { 

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

そして、ここで私は、ネストされたのforeachを使用してループ各ユーザーの投稿を介して第1、次にユーザーをループにしようとしている:

.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

単一の約束に対して複数の解決を呼び出すことはできません。この約束は最初のループ反復で解決されており、他のループは無視されています。

すべてのgranchildを配列に保存することはできますが、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

関連する問題