Firebase返回多个对象

时间:2016-03-22 21:51:32

标签: firebase angularfire

我正在使用firebase,在下面的查询中extand()是一个连接对象的函数。有人可以帮我从查询中删除$timeout吗?

目前我正在等待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;
    };

1 个答案:

答案 0 :(得分:0)

我会通过将“child_added”替换为“value”来简化此操作。这将返回播放器列表,您可以使用常规JS迭代它们 然后拨打

usersRef.child(snap.key())。once(“value”,function(data)

对于结果中的每个项目,并将这些promises中的每一个推送到数组

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

然后你可以

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

将所有承诺合并为一个承诺