在特定条件下无法获得 200 响应

Cant get a 200 response on a specific condition

我正在开发一个应用程序的 NodeJs/Sails 后端。 我正在努力的功能是假设 select 在 3 到 4 天前结束的所有游戏(脚)生成一个通知(actu)给游戏的所有玩家以通知他们奖杯(最佳 &本场比赛最差球员)。

我刚刚添加了一个条件,以防止在比赛(脚)没有任何奖杯时生成通知(actu)。这是全部功能:

Foot.query("SELECT id FROM foot WHERE foot.date <'"+nowMinus3d+"' AND date >'"+nowMinus4d+"'", function(err, results){
  _.each(results.rows, function(result, err){
    Player.query("SELECT player.user, player.foot FROM player WHERE (player.statut = 2 OR player.statut = 3) AND player.foot ='"+result["id"]+"'", function(err, players){
      async.each(players.rows, function(player, callback){
        Trophe.findOne({foot: player["foot"]}).exec(function findOneCB(err, trophe){
           if (err) {console.log(err);}
           if (trophe){
              console.log(trophe);
              Actu.create({user:player["user"], related_user:player["user"], typ:'resultFoot', related_stuff: player["foot"]}).exec(function(err,actu){
                if(err){
                  console.log(err);
                }
                else {
                  Connexion.findOne({user:player["user"]}).exec(function(err, connexion){
                    if (connexion){
                      sails.sockets.emit(connexion.socket_id,'notif',actu);
                      callback();
                    }
                    else {
                      callback();
                    }
                  });
                }
              });
            }
          else {
            console.log("Personne n'a été élu sur ce foot")
          }
        });
      },function(){
        res.status(200).end();
      })
    })
  })
})

所以 1) 我 select 3 到 4 天前结束的脚 2) 我 select 与这些足球比赛相关联的球员 3)如果足球比赛有奖杯,我会为他们每个人生成一个Actu 4)在我的循环结束时(async.each),res.status(200).end();

如果我有一个奖杯,一切都很好,我得到了 200 个响应。但是当没有奖杯时,我会打印 console.log("personne n'a été élu sur ce foot"),但我从未收到 200 响应。

我不应该得到 200 响应,即使现在有奖杯,因为 res.status(200).end(); 是 async.each 函数的回调吗?它不依赖于奖杯的存在。我做错了什么?

因为你没有使用回调,所以async无法完成。只需更改为:

console.log("Personne n'a été élu sur ce foot");
callback();