Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 节点js计数器值不会增加_Node.js_Firebase_Firebase Realtime Database - Fatal编程技术网

Node.js 节点js计数器值不会增加

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

因此,它的想法是获得teamInfo的实例,然后每个团队都会获得游戏信息,并在有比赛时更新游戏信息,我希望计数器在找到的每个比赛中递增,然后最终输出对游戏信息进行的比赛(或更新)总数

我的代码如下:

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)(“最终计数:+计数器”)当我希望只在所有迭代完成后调用它时,立即调用它!?