执行以下代码时出现此错误:
getAggregatedRatings(query).then(ratings=>{
if(ratings){
return res.json(ratings);
}else{
return res.send(200);
}
}).catch((error)=>{
return res.send(500);
});
function getAggregatedRatings(query){
movieRating.aggregate(query)
.exec((err, ratings)=> {
if (err || !ratings) {
return Promise.reject(err);
}
else {
return Promise.resolve(ratings);
}
});
}
请注意'getAggregatedRatings'会按预期返回查询结果。 请告诉我我做错了什么。
答案 0 :(得分:3)
您的getAggregatedRatings
函数未返回承诺或其他任何内容,这解释了为什么在尝试访问它时,结果未定义。
尝试将其更改为:
function getAggregatedRatings(query){
return new Promise((resolve, reject) => {
movieRating.aggregate(query)
.exec((err, ratings)=> {
if (err || !ratings) {
reject(err);
}
else {
resolve(ratings);
}
});
})
}
答案 1 :(得分:0)
您可能正在使用mongoose进行此查询。如果您使用的是最新版本的mongoose,那么.exec()
已经返回了一个承诺,因此您可以避免在手动创建的新承诺中包含一个承诺的promise anti-pattern,而您可以只使用承诺它已经回归:
function getAggregatedRatings(query){
return movieRating.aggregate(query).exec().then(result => {
if (!result) {
throw new Error("no results found");
}
});
}