Firebase 使用外部查询结果函数
Firebase use query result outside function
好吧,我对Javascript很陌生,我正在尝试使用firebase
作为我正在制作的简单游戏的后端。
我有以下非常简单的javascript代码访问我的数据:
var myData = new Firebase("https://theurl.firebaseio.com/Player/results"); var p1; var player1 = myData.child("1"); player1.on("value", function(snapshot) { p1 = snapshot.val(); console.log(p1["Name"]+ " " + p1["Draws"]); }); /* This line seems to be the problem, how do I assign the result of the query outside the above function? */ p1["Draws"] += 1; player1.update({ "Draws": p1["Draws"] });变量
p1
未正确分配。我该如何解决这个问题?
变量p1
分配得非常好。但是您访问它的时间尚未填充。
为了了解发生了什么,让我们在代码中添加一些日志语句:
var myData = new Firebase("https://theurl.firebaseio.com/Player/results");
var p1;
var player1 = myData.child("1");
console.log('Before reading from Firebase');
player1.on("value", function(snapshot) {
p1 = snapshot.val();
console.log('Result from Firebase: '+p1["Name"]+ " " + p1["Draws"]);
});
console.log('After reading from Firebase');
p1["Draws"] += 1;
player1.update({
"Draws": p1["Draws"]
});
运行此代码时,您将看到输出为:
从火力基地阅读之前
从火力基地阅读后
结果来自火力基地...
这可能不是您期望的顺序。
原因是数据是从 Firebase 异步加载的。因此,带有player1.on("value'
的行开始从Firebase加载数据。但由于这可能需要一些时间,浏览器会在语句后继续执行代码。然后,当 Firebase 中的值可用时,它会使用该数据的snapshot
调用您的函数。
这种类型的异步加载在常见的 Web 编程中非常常见。要处理它,您必须反转代码的逻辑。与其说:"首先我得到玩家 1,然后我更新他的抽奖",不如把它想象成"每当玩家 1 的值发生变化时,我都会做 xyz"。
您通常通过将"then"代码移动到回调函数中来执行此操作:
var myData = new Firebase("https://theurl.firebaseio.com/Player/results");
var p1;
var player1 = myData.child("1");
player1.on("value", function(snapshot) {
p1 = snapshot.val();
p1["Draws"] += 1;
player1.update({
"Draws": p1["Draws"]
});
});
有关此问题的精彩解释,请阅读为什么在函数内部修改变量后,我的变量保持不变? - 异步代码参考
相关文章:
- Node.js使用Series函数(模式?)实现流控制时出现意外结果
- 试图将onChange函数作为道具传递给GrandChlidren,结果是TypeError:这是未定义的
- 什么'这是从第三个函数上的async 1st函数获得结果的更好方法
- 函数式javascript读取、异步、写入结果
- 函数hide()、prev()、show()被组装以获得所需的结果,但无法理解其工作原理
- JScript 错误: 无法分配给函数结果
- 仅在第一个结果中显示/隐藏MySQL结果函数
- 从Mongoose结果匿名函数返回父函数
- MeteorJS从上一个函数中检索JS中的结果
- 如何在函数外返回此操作的结果
- 将web服务回调的结果绑定到Javascript中的调用函数
- 原型中漂亮的代码,如何省略'不是函数'空结果选择器上的错误
- 如何在使用函数document.write()打印最终结果后,使用Javascript滚动到页面顶部
- 为什么我的javascript地理编码函数返回空白结果
- toFixed javascript函数给出奇怪的结果
- Node Express Handlebars帮助程序未返回函数的结果
- 正在等待HTTP调用从函数返回结果
- 如何根据JavaScript函数的结果用PHP编写数据库?(FB应用程序)
- Firebase 使用外部查询结果函数
- Javascript 全局数组在 JSON 结果函数中不可见