我正在使用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;
};
答案 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(...
将所有承诺合并为一个承诺