[英]Mongoose: properly getting the query result
你好吗? 我对mongoose和mongoDB相当陌生,在进行基本查询时遇到了麻烦。 所以,我有这段代码:
function addVoterToElection(req, res) {
let query = Election.findOne({ 'name' : req.body.electionName });
let result = query.exec((err, election) => {
if(err) return err;
return res.send(election);
});
}
这可以按预期工作,因为t将我需要的选举发送回了请求者:
{
"_id": "594408b7c94fcdc009000001",
"votechain": "594408b7c94fcdc009000002",
"name": "eleicaoteste",
"electionID": 12,
"__v": 0,
"voters": null
}
但是,问题是我需要将该对象用于其他目的,并且在从query.exec中“提取”该对象时遇到了麻烦。 如果我做
let query = Election.findOne({ 'name' : req.body.electionName });
let result = query.exec((err, election) => {
if(err) return err;
return (election);
});
res.json(result);
我回来的就是
{
"emitted": {},
"ended": false,
"_events": {},
"_eventsCount": 2
}
因此,我无法将其用于依赖于使该选举对象正常工作的下一个查询。 我能做什么? 我知道这是一个非常基本的问题,但是我不确定我是否了解整个承诺的工作原理。 非常感谢!
问题在于您没有使用promise
权利。
这是开始学习Promises
的好地方:
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise
解决方案非常简单:
let query = Election.findOne({ 'name' : req.body.electionName });
let result = query.exec();
result.then((result) => {
res.json(result);
}).catch((error) => {
// console.log(err);
});
let query = Election.findOne({ 'name' : req.body.electionName });
let result = query.exec((err, election) => {
if(err) return err;
return (election);
});
res.json(result);
查询异步运行(在后台),而其余代码则执行。 执行完查询后,它将执行需要err和选举的回调。 当您返回结果时,它尚未完成执行,因此是您的问题。
您可以做的是将res.json移到回调的主体中,如下所示:
let query = Election.findOne({ 'name' : req.body.electionName });
query.exec((err, election) => {
if(err) return err;
res.json(election);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.