Javascript Firebase:第一个参数在属性中包含未定义的

Javascript Firebase:第一个参数在属性中包含未定义的,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,在我的网页中,我试图从一个firebase数据库进行查询,并在另一个firebase数据库上进行更新 问题是,当我尝试对第二个数据库进行更新时,我得到一个错误,表示该属性未定义 我放了几个控制台日志,我确信它们包含一个数值,所以我不确定为什么firebase抱怨属性未定义 我的HTML页面 <html> <head> <meta charset="utf-8"> <title> Firebase Test &

在我的网页中,我试图从一个firebase数据库进行查询,并在另一个firebase数据库上进行更新

问题是,当我尝试对第二个数据库进行更新时,我得到一个错误,表示该属性未定义

我放了几个控制台日志,我确信它们包含一个数值,所以我不确定为什么firebase抱怨属性未定义

我的HTML页面

<html>
    <head>
    <meta charset="utf-8">
    <title>
    Firebase Test
    </title>
    </head>
    <style>
    .alright
    {
        text-align: left;
        border: 1px solid black;
        border-collapse: collapse;
    }
    </style>
    <body>


<input type="button" value="SHUFFLE" onClick="window.location.reload()">

<table class="alright">
<tr>
<th><h1>Niyant</h1></th>
<th><h1>Varun</h1></th>
</tr>

<!--<tr>
<th><h1 id="niyantscoretag"></h1></th>
<th><h1 id="varunscoretag"></h1></th>
</tr>-->
<tr>
<td><h2 id="ns">0</td>
<td><h2 id="vs">0</td>
</tr>
<tr>
<td><h3 id="nrank">0</td>
<td><h3 id="vrank">0</td>
</tr>
<tr>
<td><img id="imgtag1"/></td>
<td><img id="imgtag2"/></td>
</tr>
<tr>
<td><h2>Winner is</h2></td>
<td><img id="imgtag3"/></td>
</tr>
</table>


    <script src="https://www.gstatic.com/firebasejs/3.9.0/firebase.js"></script>
    <script>

      var config = {
        apiKey: "AIzaSyAXpEHm1uLfRLS-6QCun1iVioquEmpmbAI",
        authDomain: "helloworld-3c2e7.firebaseapp.com",
        databaseURL: "https://helloworld-3c2e7.firebaseio.com",
        projectId: "helloworld-3c2e7",
        storageBucket: "helloworld-3c2e7.appspot.com",
        messagingSenderId: "103101977379"
      };
      firebase.initializeApp(config);

      var otherAppConfig = {

    apiKey: "AIzaSyC3UBiLaBJoW0vfY5xJgtFWV_zdKl9vfWo",
    authDomain: "scoringdev-b5ede.firebaseapp.com",
    databaseURL: "https://scoringdev-b5ede.firebaseio.com",
    projectId: "scoringdev-b5ede",
    storageBucket: "scoringdev-b5ede.appspot.com",
    messagingSenderId: "123331117443"

};

var database1 = firebase.initializeApp(config,"primary");
var database1_database = database1.database();

var database2 = firebase.initializeApp(otherAppConfig, "secondary");
var database2_database = database2.database();


/************HERE**********/
var nscoref = database2_database.ref('Niyant/Score');
var vscoref = database2_database.ref('Varun/Score');
var vscore,nscore,vscoreincremented,nscoreincremented;

nscoref.on('value', 
                function(snapshot){


                                        nscore = snapshot.val();
                                        nscoreincremented = nscore + 1;
                                        console.log("nscore = "+nscore);
                                        console.log("nscoreincremented = "+nscoreincremented);

                                   }
        );

vscoref.on('value', 
                function(snapshot){



                                        vscore = snapshot.val();
                                        vscoreincremented = vscore + 1;
                                        console.log("vscore = "+vscore);
                                        console.log("vscoreincremented = "+vscoreincremented);

                                   }
        );




var URLPath1,URLPath2,nsv,vsv;


var num1 = Math.floor(Math.random() * 100) + 1;
var num2 = Math.floor(Math.random() * 100) + 1;

if(num1 < num2)
{
    database2_database.ref('Niyant').set({Score: nscoreincremented});
}
else if(num1 > num2)
{
    database2_database.ref('Varun').set({Score: vscoreincremented});
}


var imgref1 = database1_database.ref(num1+'/Location');
var imgref2 = database1_database.ref(num2+'/Location');
var imgref1_name = database1_database.ref(num1+'/Name');
var imgref2_name = database1_database.ref(num2+'/Name');


imgref1.on('value', 
                function(snapshot){

                                        URLPath1 = snapshot.val();
                                        console.log(URLPath1);
                                        console.log(snapshot.val());

                                        document.getElementById("imgtag1").src = URLPath1;
                                        document.getElementById("nrank").innerText = 'Rank '+num1;
                                        if(num1 < num2)
                                        {
                                            document.getElementById("imgtag3").src = URLPath1;


                                        }

                                   }
        );

imgref2.on('value', 
                function(snapshot){

                                        URLPath2 = snapshot.val();
                                        console.log(URLPath2);


                                         document.getElementById("imgtag2").src = URLPath2;
                                         document.getElementById("vrank").innerText = 'Rank '+num2;
                                         if(num2 < num1)
                                        {
                                            document.getElementById("imgtag3").src = URLPath2;

                                        }
                                  }

        );

imgref1_name.on('value', 
                function(snapshot){

                                        URLPath1_name = snapshot.val();
                                        console.log(URLPath1_name);
                                        console.log(snapshot.val());

                                        document.getElementById("ns").innerText = URLPath1_name;


                                   }
        );

imgref2_name.on('value', 
                function(snapshot){

                                        URLPath2_name = snapshot.val();
                                        console.log(URLPath2_name);


                                         document.getElementById("vs").innerText = URLPath2_name;

                                   }
        );


    </script>



    </body>
    </html>

火基试验
好吧
{
文本对齐:左对齐;
边框:1px纯黑;
边界塌陷:塌陷;
}
尼扬特
瓦伦
0
0
0
0
变量配置={
apiKey:“Aizasyaxpehm1ulfls-6qcun1vioquempmbai”,
authDomain:“helloworld-3c2e7.firebaseapp.com”,
数据库URL:“https://helloworld-3c2e7.firebaseio.com",
projectId:“helloworld-3c2e7”,
storageBucket:“helloworld-3c2e7.appspot.com”,
messagingSenderId:“103101977379”
};
firebase.initializeApp(配置);
var otherAppConfig={
apiKey:“AIzaSyC3UBiLaBJoW0vfY5xJgtFWV_zdKl9vfWo”,
authDomain:“scoringdev-b5ede.firebaseapp.com”,
数据库URL:“https://scoringdev-b5ede.firebaseio.com",
projectId:“scoringdev-b5ede”,
storageBucket:“scoringdev-b5ede.appspot.com”,
messagingSenderId:“12333117443”
};
var database1=firebase.initializeApp(配置,“主”);
var database1u database=database1.database();
var database2=firebase.initializeApp(otherAppConfig,“secondary”);
var database2u database=database2.database();
/************这里**********/
var nscoref=database2_database.ref('Niyant/Score');
var vscoref=database2_database.ref('Varun/Score');
var vscore、nscore、vscoreincremented、nscoreincremented;
nscoref.on('值',
功能(快照){
nscore=snapshot.val();
nscoreincremented=nscore+1;
console.log(“nscore=“+nscore”);
console.log(“nscoreincremented=“+nscoreincremented”);
}
);
vscoref.on('value',
功能(快照){
vscore=snapshot.val();
vscoreincremented=vscore+1;
console.log(“vscore=“+vscore”);
console.log(“vscoreincremented=“+vscoreincremented”);
}
);
变量URLPath1、URLPath2、nsv、vsv;
var num1=Math.floor(Math.random()*100)+1;
var num2=Math.floor(Math.random()*100)+1;
如果(num1num2)
{
database2_database.ref('Varun').set({Score:vscoreincremented});
}
var imgref1=database1_database.ref(num1+'/Location');
var imgref2=database1_database.ref(num2+'/Location');
var imgref1_name=database1_database.ref(num1+'/name');
var imgref2_name=database1_database.ref(num2+'/name');
imgref1.on('值',
功能(快照){
URLPath1=snapshot.val();
console.log(URLPath1);
console.log(snapshot.val());
document.getElementById(“imgtag1”).src=URLPath1;
document.getElementById(“nrank”).innerText='Rank'+num1;
如果(num1
这是来自Chrome控制台

有问题的更新在源代码中用“***此处****”注释掉,以供参考


有人能帮我吗?

数据是从Firebase异步读取的。您的代码不能满足这一要求,这导致您试图在实际加载之前设置分数

解决方案是正确地同步对数据的访问:首先确保加载了所有内容,然后才更新分数

var nscoref = database2_database.ref('Niyant/Score');
var vscoref = database2_database.ref('Varun/Score');
var vscore,nscore,vscoreincremented,nscoreincremented;

function updateScore() {
    var num1 = Math.floor(Math.random() * 100) + 1;
    var num2 = Math.floor(Math.random() * 100) + 1;
    if(num1 < num2) {
        database2_database.ref('Niyant').set({Score: nscoreincremented});
    }
    else if(num1 > num2) {
        database2_database.ref('Varun').set({Score: vscoreincremented});
    }
}

nscoref.on('value', function(snapshot){
    nscore = snapshot.val();
    nscoreincremented = nscore + 1;
    if (nscoreincremented && vscoreincremented) {
        updateScore();
    }
});

vscoref.on('value', function(snapshot){
    vscore = snapshot.val();
    vscoreincremented = vscore + 1;
    if (nscoreincremented && vscoreincremented) {
        updateScore();
    }
});
var nscoref=database2_database.ref('Niyant/Score');
var vscoref=database2_database.ref('Varun/Score');
var vscore、nscore、vscoreincremented、nscoreincremented;
函数更新