2016-03-22 20 views
0

Firebase kullanıyorum ve aşağıdaki sorguda extand() nesneleri birleştiren bir işlevdir. Birisi sorgumdan $timeout kaldırmam için bana yardımcı olabilir mi?Firebase birden çok nesneyi döndürüyor

Şu anda playerList doldurulmasını bekliyorum.

var getJoinedPlayers = function(gameId){ 
     var deferred = $q.defer(); 
     var playerList = {}; 
     var usersRef = new Firebase(FBURL+'users'); 
     var gameRef = new Firebase(self.firebaseURL); 
     var gamePlayersRef = gameRef.child(gameId).child("players"); 
     gamePlayersRef.on("child_added", function(snap) { 
      usersRef.child(snap.key()).once("value", function(data) { 
      playerList[snap.key()] = extend({'playerId': snap.key()},data.val()); 
      }) 
     }); 
     $timeout(function() { 
      if (playerList) { 
      deferred.resolve(playerList); 
      } else { 
      reason = {'message': "player Not found"}; 
      deferred.reject(reason); 
      } 
     }, 1300); 

     return deferred.promise; 
    }; 

cevap

0

"child_added" değerini "value" ile değiştirerek bunu basitleştiririm. Bu, düzenli JS ile tekrarlayabileceğiniz oyuncu listesini döndürecektir.
Ardından çağrı

usersRef.child (snap.key()). Bir kere ("değer", function (data) sonucu öğelerin her biri için

ve içine bu sözler her itmek bir dizi

sonra
promiseArray.push(usersRef.child(snap.key()).once("value", function(data)... 

yapabildin

tek vaadi içine tüm sözleri birleştirecek
$q.all(promiseArray).then(... 

İlgili konular