gpt4 book ai didi

javascript - 火力地堡 : First Argument contains undefined in property

转载 作者:行者123 更新时间:2023-11-29 16:42:42 27 4
gpt4 key购买 nike

在我的网页中,我尝试从一个 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>

这是来自 Chrome 控制台。

enter image description here

有问题的更新在源代码中用“***HERE****”注释掉以供引用。

有人可以帮我吗?

最佳答案

数据是从 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();
}
});

关于javascript - 火力地堡 : First Argument contains undefined in property,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44013321/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com