在特定条件下无法获得 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();
我正在开发一个应用程序的 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();