- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的网页中,我尝试从一个 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 控制台。
有问题的更新在源代码中用“***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/
例如,如果我的程序名称是 test.c 然后对于以下运行命令,argc = 2 而不是 4。 $test abc pqr* *xyz* 最佳答案 尝试运行: $ echo abc pqr* *xyz*
我正在尝试使用一个容器来显示TextField,但是该容器不喜欢我的操作顺序。这是我的代码: Widget build(BuildContext context) { return Scaffol
我有以下代码: class MetricGoogleGateway extends AMetricGateway{ constructor(id, name, token) {
我像这样调用下面的对象方法。 new Cout( elem1 ).load( 'body' ) new COut( elem1 ).display( 'email' ) 我一次只使用一个实例。因为我一
我正在尝试使用 C++11 中的可变参数函数模板,并通过如下代码了解了基本思想: void helper() { std::cout void helper( T&& arg ) {
在学习 ExtJS 4 时,我发现在定义一个新类时,在 initComponent 中方法可以使用 this.callParent(arguments) 调用父类的构造函数. 我想知道这个 argum
使用 XCode 9,Beta 3。Swift 4。 statsView.createButton("Button name") { [weak self] Void in //stuff st
以下代码将打印1: (function (arguments) { console.log(arguments); }(1, 2)); 实际上,arguments 对象已被覆盖。是否可以恢复函
/** * @param $name * @return Response * @Route ("/afficheN/{name}",name="afficheN") */ public fu
我习惯使用Scala scopt用于命令行选项解析。您可以选择参数是否为 .required()通过调用刚刚显示的函数。 如何定义仅在定义了另一个参数时才需要的参数? 例如,我有一个标志 --writ
所以这是我的代码: def is_valid_move(board, column): '''Returns True if and only if there is an o
我试图在这里运行此代码: threads = [threading.Thread(name='ThreadNumber{}'.format(n),target=SB, args(shoe_type,m
在静态类型函数编程语言(例如 Standard ML、F#、OCaml 和 Haskell)中,编写函数时通常将参数彼此分开,并通过空格与函数名称分开: let add a b = a + b
function validateArguments(args) { if(args.length 2) { throw new RangeError("Invalid amo
我正在使用 Django 1.5 并尝试将参数传递到我的 URL。当我使用前两个参数时,下面的代码工作正常,使用第三个参数时我收到错误。我已经引用了新的 Django 1.5 更新中的 url 用法,
我刚刚开始使用 ember js 并且多次被这个功能绊倒 有人可以简要介绍一下 this._super() 的使用,并解释 ...arguments 的重要性 谢谢 最佳答案 每当您覆盖类/函数(例如
这个问题在这里已经有了答案: How to fix an "Argument passed to call that takes no arguments" error? (2 个答案) 关闭 3
我正在创建一个简单的登录注册应用程序。但是我遇到了错误,我不知道如何解决,请帮忙!这是我的代码: // // ViewController.swift // CHLogbook-Applicati
我是 Swift 的初学者。我尝试创建一个表示 Meal 的简单类。 它有一些属性和一个返回可选的构造函数 但是当我尝试测试它或在任何地方实例化它时,我得到的只是一个错误。似乎无法弄清楚发生了什么。
我有一个在特殊环境下运行其他程序的系统程序: cset shield -e PROGRAM .现在要运行一个 java 程序,我输入了 cset shield -e java PROGRAM ,但这不
我是一名优秀的程序员,十分优秀!