gpt4 book ai didi

javascript - Java/Firebase 脚本执行多次

转载 作者:行者123 更新时间:2023-12-03 05:22:24 24 4
gpt4 key购买 nike

我遇到了一个有趣的问题。我所做的总体思路是从 Firebase 数据库中提取数据,并根据该数据填充表。在初始填充过程中,一切都运行得很好——单元格和行都按应有的方式填充,但奇怪的问题是脚本似乎再次随机执行。我已将传入数据记录到控制台,并且在一段时间后可以看到它打印两次。

如果我要在页面之间导航或重新加载页面,则不会发生第二次执行 - 在这两种情况下,一切都会按预期进行。当我锁定计算机后重新登录计算机时,似乎会发生问题???有人知道这里会发生什么吗?以下脚本的相关部分:

const table = document.getElementById('myTable');
firebase.auth().onAuthStateChanged(firebaseUser => {
if (firebaseUser) {
let user = firebase.auth().currentUser;
let uid = user.uid;
const dbRef = firebase.database().ref().child("data/" + uid);
dbRef.once('value', snap => {
var dataCount = snap.child("secondData").numChildren();
var datalist = snap.child("secondData").val();
var dataArray = Object.keys(datalist).map(function(k) {
return datalist[k]
});
pullAllInfo(dataCount, dataArray);
});
}
});

function pullAllInfo(count, array) {
let k = 0;
let dataArray = [];
for (i = 0; i < count; i++) {
let specificRef = firebase.database().ref().child("secondData/" + array[i]);
specificRef.once('value', snap => {
var optionsTag = array[k];
k++;
var dataId = snap.child("id").val();
var dataName = snap.child("name").val();
var dataCount = snap.child("data").numChildren();
dataArray.push(dataId, dataName, dataCount, optionsTag);
if (k == count) {
buildTable(dataArray);
console.log(dataArray);
}
});
}
}

正如您从上面的代码中看到的,我为每个引用调用 .once() ,这将防止典型的 .on() 调用中的数据重复。只是似乎无法弄清楚这一点。另外,我还有一台 iMac,专为那些对我潜在的计算机解锁诊断感到好奇的人准备。

谢谢大家!

最佳答案

很可能,身份验证状态正在更改并触发您的功能。尝试在 firebase.auth().onAuthStateChanged 下抛出日志,如下所示:

firebase.auth().onAuthStateChanged(firebaseUser => {
console.log( 'auth state changed', firebaseUser );
if (firebaseUser) {

我的猜测是,当您从计算机注销/登录时,您会看到 AuthState 正在发生变化。

关于javascript - Java/Firebase 脚本执行多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41318558/

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