[英]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.