我正在尝试在mongo查询上运行for循环,以便不断从数据库中检索数据。在检索之后,我尝试将其推送到数组然后res.send(array)
以避免未处理的承诺拒绝。但相反,数据不会被推入阵列。
router.get('/results/:week',function(req,res,next){
var week = req.params.week - 1;
var results = [];
for(week; week>0; week--){
Fixture.find({'week':week}).then(function(fixture){
results.push(fixture);
});
}
res.send(results);
Fixture模型包含一个变量周,我想从某一周向下检索所有结果(灯具)。给出的结果是空数组[]
,如果我res.send(fixture)
,我得到未处理的承诺拒绝警告。请帮忙,谢谢。
答案 0 :(得分:0)
你的res.send需要在回调中。
此外,在找到this article后,我想也许这可能是你需要的(注意,“让周......”):
router.get('/results/:week',function(req,res,next){
var results = [];
for(let week = req.params.week -1; week>0; week--){
Fixture.find({'week':week}).then(function(fixture){
results.push(fixture);
if (week == 1) {
res.send(results);
}
});
}
答案 1 :(得分:0)
这与Javascript中的顺序或执行有关。我建议你看看这本书系列,有很多有用的见解!
您可以在代码中进行解决方法,如下所示:
router.get('/results/:week',function(req,res,next){
var week = req.params.week - 1;
var results = [];
for(week; week>0; week--){
Fixture.find({'week':week}).then(function(fixture){
results.push(fixture);
});
}
if(week == 0)
res.send(results);
else
res.send([]);
答案 2 :(得分:0)
由于对mongodb的请求的异步性,你得到了空数组。
首先,我认为您需要检查周参数是否为数字
router.get('/results/:week',function(req,res,next){
if(!parseInt(req.params.week))
res.send("Week param not a number");
...
您可以使用mongoose内置函数来搜索多个结果,而不是在循环内使用异步函数
router.get('/results/:week',function(req,res,next){
if(!parseInt(req.params.week))
res.send("Week param not a number");
let week = parseInt(req.params.week);
// Fixture.find(week: {$lt: week}).
// or
//Fixture.find().where('week').lt(week).
// or
Fixture.find().lt('week', week).then(function(fixtures){
res.send(fixtures);
});
}
或者使用循环,如果您喜欢这种方式
router.get('/results/:week',function(req,res,next){
if(!parseInt(req.params.week))
res.send("Week param not a number");
let week = parseInt(req.params.week)-1;
let weeks = [];
for(week; week > 0; week--){
weeks.push(week);
}
Fixture.find().in('week', weeks)
.then(function(fixtures){
res.send(fixtures);
});
}
P.S。在列出的所有描述的情况下,您将减少请求数量。