Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用js代码更新firebase数据库中的数据会返回意外循环_Javascript_Firebase_Firebase Realtime Database - Fatal编程技术网

Javascript 使用js代码更新firebase数据库中的数据会返回意外循环

Javascript 使用js代码更新firebase数据库中的数据会返回意外循环,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,几周前,我开始使用javascript和firebase创建自己的游戏,在更新数据方面遇到了一些问题。当我为这个游戏创建一个战斗系统时,我试图让玩家从赢得战斗中获得一些好处。当玩家赢得一场战斗时,我想通过添加经验来更新他的经验(例如),但当我添加另一个更新数据时(当玩家赢得一场战斗时,系统正在更新关于战斗胜利的数据,关于统计数据的数据位置在数据库中的不同位置),它返回循环。 JS代码在这里 //battle_system.js var opponent = nextBattle.getAttri

几周前,我开始使用javascript和firebase创建自己的游戏,在更新数据方面遇到了一些问题。当我为这个游戏创建一个战斗系统时,我试图让玩家从赢得战斗中获得一些好处。当玩家赢得一场战斗时,我想通过添加经验来更新他的经验(例如),但当我添加另一个更新数据时(当玩家赢得一场战斗时,系统正在更新关于战斗胜利的数据,关于统计数据的数据位置在数据库中的不同位置),它返回循环。 JS代码在这里

//battle_system.js

var opponent = nextBattle.getAttribute('mon-name');
var hp = 0;

 var getPlayer = firebase.database().ref().child('accounts/' + uid + '/character/char');
 var getEnemy = firebase.database().ref().child('Monsters/' + opponent);

                    getPlayer.on('value', (snapshot) => {
                       var getSnapshot = snapshot.val();


                         getEnemy.on('value', (snap) => {
                              var getSnap = snap.val();

                              var enemyHp = getSnap.hp;
                              var playerHp = getSnapshot.hp;

                              var enemy = {
                                  name: getSnap.name,
                                  hp: enemyHp,
                                  damage: getSnap.dmg,
                                  armor: getSnap.armor,
                                  lvl: getSnap.lvl
                              } 
                              var player = {
                                  name: getSnapshot.nick,
                                  hp: playerHp,
                                  damage: getSnapshot.dmg,
                                  armor: getSnapshot.armor,
                                  lvl: getSnapshot.lvl
                              }
                              var starCountRef = firebase.database().ref('accounts/' + uid + '/character/battles/stats/' + opponent);

                              btl_section.innerHTML = '';
                              starCountRef.on('value', (snapStat) => {

                                  var x = (snapStat.val().wins)+1;
                                  var y = (snapStat.val().loses)+1;

                                  while(player.hp > 0 && enemy.hp > 0){
                                      var MathPlayer = Math.random(),
                                          MathEnemy = Math.random();

                                      enemy.hp -= player.damage * MathPlayer;
                                      player.hp -= enemy.damage * MathEnemy;
                                      btl_section.innerHTML = btl_section.innerHTML + 'Enemy: ' + enemy.hp + '<br> Player: ' + player.hp + '<br>';

                                     if(player.hp < 0){
                                          firebase.database().ref('accounts/' + uid + '/character/battles/stats/' + opponent).update({
                                              loses : y
                                          });
                                      }else if(enemy.hp < 0) {
                                          console.log('win');
                                          firebase.database().ref('accounts/' + uid + '/character/battles/stats/' + opponent).update({
                                              wins : x
                                          });
                                          firebase.database().ref('accounts/' + uid + '/character/char').update({
                                              exp : (30 * (Math.random()*100))
                                          });
                                      }

                                 }

                            });
                         });

                    });
  //firebase structure
Monsters: {
  Freder : {
    armor: 0,
    dmg: 10,
    lvl: 1,
    hp: 100,
    name: 'Freder'
 }
},
accounts:{
   uid:{
    character:{
       battles:{
          stats: {
             wins: 0,
            loses: 0
          }
        },
        char:{
          exp: 0,
          lvl: 0,
          dmg: 12,
          hp: 100,
          armor: 0,
          nick: 'Nickname'
       }
    }

   }
 }
var-opporter=nextBattle.getAttribute('mon-name');
var-hp=0;
var getPlayer=firebase.database().ref().child('accounts/'+uid+'/character/char');
var get敌军=firebase.database().ref().child('怪物/'+对手);
getPlayer.on('值',(快照)=>{
var getSnapshot=snapshot.val();
GetDebuy.on('value',(snap)=>{
var getSnap=snap.val();
var enemyHp=getSnap.hp;
var playerHp=getSnapshot.hp;
var敌人={
名称:getSnap.name,
hp:enemyHp,
损坏:getSnap.dmg,
装甲:getSnap.armor,
lvl:getSnap.lvl
} 
变量播放器={
名称:getSnapshot.nick,
惠普:playerp,
损坏:getSnapshot.dmg,
装甲:getSnapshot.armor,
lvl:getSnapshot.lvl
}
var starCountRef=firebase.database();
btl_section.innerHTML='';
starCountRef.on('value',(snapStat)=>{
var x=(snapStat.val().wins)+1;
变量y=(snapStat.val().loss)+1;
while(player.hp>0&&friend.hp>0){
var MathPlayer=Math.random(),
mathDebuy=Math.random();
敌方.hp-=玩家.damage*玩家;
player.hp-=敌人。伤害*敌人;
btl_section.innerHTML=btl_section.innerHTML+'敌人:'+敌人.hp+'
玩家:'+Player.hp+'
'; 如果(player.hp<0){ firebase.database().ref('accounts/'+uid+'/character/battles/stats/'+hatcher)。更新({ 损失:y }); }否则如果(敌方hp<0){ console.log('win'); firebase.database().ref('accounts/'+uid+'/character/battles/stats/'+hatcher)。更新({ 胜利:x }); firebase.database().ref('accounts/'+uid+'/character/char')。更新({ exp:(30*(Math.random()*100)) }); } } }); }); }); //火基结构 怪物:{ 弗雷德:{ 装甲:0, dmg:10, 级别:1, 惠普:100, 名字:“弗雷德” } }, 账户:{ uid:{ 人物:{ 战斗:{ 统计数据:{ 胜利:0, 输:0 } }, 字符:{ 实验:0, 级别:0, dmg:12, 惠普:100, 装甲:0, 尼克:“昵称” } } } }
现在,我要说的是,当玩家赢得这场战斗时,经验和胜利的统计数据将毫无问题地添加,但战斗是循环的。当我在浏览器控制台中看到一个关于赢得游戏的consol.log时,我看到了来自result的数百条日志,几秒钟后,游戏返回错误“UncaughtRangeError:超出了最大调用堆栈大小”。现在我需要帮助。我怎样才能解决这个问题