2016-03-22 2 views
0

Я использую firebase и в нижнем запросе extand() - это функция, которая объединяет объекты. Может ли кто-нибудь помочь мне удалить $timeout по моему запросу?Firebase возвращает несколько объектов

В настоящее время я жду, пока у меня будет playerList.

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; 
    }; 

ответ

0

Я бы упростил это, заменив «child_added» на «value». Это вернет список игроков, с которыми вы могли бы перебирать регулярные JS.
Затем вызовите

usersRef.child (snap.key()). Один раз («значение», функция (данные)

для каждого из из элементов в результате, и толкать каждый из этих обещаний в массив

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

тогда вы могли бы

$q.all(promiseArray).then(... 

, который будет объединять все обещания в одно обещание

Смежные вопросы