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
}
但问题是我需要将该对象用于其他目的,而且我遇到了麻烦并且#34;提取"它来自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
}
因此我无法将其用于依赖此选举对象工作的下一个查询。我能做什么?我知道这是一个相当基本的问题,但我不确定我是否理解整个承诺的作用。 非常感谢你!
答案 0 :(得分:0)
问题在于您没有使用promise
权限。
这是开始学习Promises
的好地方:
https://developer.mozilla.org/en-US/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);
});
答案 1 :(得分:-1)
let query = Election.findOne({ 'name' : req.body.electionName });
let result = query.exec((err, election) => {
if(err) return err;
return (election);
});
res.json(result);
查询以异步方式(在后台运行)运行,而其余代码则执行。当查询执行exec'ing时,它执行带错误和选举的回调。当你返回结果时,它还没有完成执行,因此你的问题。
您可以做的是将res.json移动到回调的主体,如下所示:
let query = Election.findOne({ 'name' : req.body.electionName });
query.exec((err, election) => {
if(err) return err;
res.json(election);
});