Node.js 节点js计数器值不会增加
因此,它的想法是获得teamInfo的实例,然后每个团队都会获得游戏信息,并在有比赛时更新游戏信息,我希望计数器在找到的每个比赛中递增,然后最终输出对游戏信息进行的比赛(或更新)总数 我的代码如下:Node.js 节点js计数器值不会增加,node.js,firebase,firebase-realtime-database,Node.js,Firebase,Firebase Realtime Database,因此,它的想法是获得teamInfo的实例,然后每个团队都会获得游戏信息,并在有比赛时更新游戏信息,我希望计数器在找到的每个比赛中递增,然后最终输出对游戏信息进行的比赛(或更新)总数 我的代码如下: let counter = 0; teams.once("value", teamSnap => { teamSnap.forEach(tSnap => { games.once("value", gameSnap => { game
let counter = 0;
teams.once("value", teamSnap => {
teamSnap.forEach(tSnap => {
games.once("value", gameSnap => {
gameSnap.forEach(gSnap => {
if(teamInfo.Name == gameInfo.AwayTeam) {
let currGame = games.child(`${gSnap.key}`);
currGame.update({
"AwayTeam": teamInfo.Name,
"AwayId": tSnap.key}),
function(error){
if (error) {
console.log("Data could not be saved." + error);
} else {
counter++;
}
}
}
}
}
}
}).then(() => {
console.log("Final Count: " + counter)
});
当我调用
console.log(“最终计数:+计数器)
时,它显示零(0),我不确定它为什么不递增 您可以在由返回的承诺中更新计数器,然后打印控制台日志
if(teamInfo.Name == gameInfo.AwayTeam) {
let currGame = games.child(`${gSnap.key}`);
currGame.update({
"AwayTeam": teamInfo.Name,
"AwayId": tSnap.key})
.then(() => {
counter++
console.log(counter)
})
.catch(error => {
console.log(error)
})
}
如果要使用现有代码:
if(teamInfo.Name == gameInfo.AwayTeam) {
let currGame = games.child(`${gSnap.key}`);
currGame.update({
"AwayTeam": teamInfo.Name,
"AwayId": tSnap.key}),
function(error){
if (error) {
console.log("Data could not be saved." + error);
} else {
counter++;
console.log(counter) //You should log your counter here...
}
}
}
你把
console.log(计数器)放在哪里代码>语句?它在末尾,计数器的init在前面并设置为零(0),这就是为什么它显示为零。您的代码是异步的。基本上,console.log语句是在updatecallnack之前激发的updates@Chris我不知道如何设置承诺,以确保计数器仅在所有操作完成后显示?!您需要在更新查询的回调函数中递增计数器。递增后登录计数器始终有效,但我希望在完全执行后输出计数器,以了解计数器成功的次数,或者总共进行了多少次更新。您提供的代码提供了与我已有的相同的行为。在回调/承诺中计数器递增后的日志记录肯定会起作用。奇怪的是它没有。您使用的是上面的确切代码吗?是的,提供的代码将在teaminfo和gameinfo比较的每次迭代中显示计数器,但我想要在所有迭代之后的总体“最终计数”,这仍然会在console.log中产生零(0)(“最终计数:+计数器”)当我希望只在所有迭代完成后调用它时,立即调用它!?