{ var z = Object.keys(snapshot.val())[2]; y = snapshot-6ren">
gpt4 book ai didi

JavaScript - Firebase 值到全局变量

转载 作者:行者123 更新时间:2023-11-28 17:23:45 25 4
gpt4 key购买 nike

ref.child("path").on("value", snapshot => {
var z = Object.keys(snapshot.val())[2];
y = snapshot.val()[z];

//Call the friggin thing
exportData(y);

function exportData(y) {
exporting(y);
}
});

function exporting(y) {
var x = y;
//console.log(y);
return x;
}

我想将 x 存储在全局变量中。

我无法执行下面的代码,因为“y”不会被传递。'y' 是局部变量。

var answer = exporting();
answer();

最佳答案

将值存储在全局变量中不是问题,而是何时让您陷入困境。

数据是从 Firebase 异步加载的。这意味着代码不会按照您可能期望的顺序运行。您可以通过在其中添加一些日志记录来最轻松地看到这一点:

console.log("Before starting to load value");
ref.child("path").on("value", snapshot => {
console.log("Loaded value");
});
console.log("After starting to load value");

当您运行此代码时,它会打印:

Before starting to load value

After starting to load value

Loaded value

这可能不是您期望的顺序。但它完美地解释了为什么在访问全局变量时未设置全局变量:该值尚未从数据库返回。

这就是为什么您需要将需要数据库数据的代码移至回调函数内部。或者,您可以使用 once() 返回一个 promise 的事实,这使得处理结果变得更容易:

function loadData() {
return ref.child("path").once("value");
});

loadData().then((snapshot) => {
... use the data from snapshot
});

请注意,对于刚接触异步加载的开发人员来说,异步加载是一个非常常见的困惑源。我强烈建议您查看有关该主题的其他一些问题:

关于JavaScript - Firebase 值到全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52011549/

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