簡體   English   中英

貓鼬:正確獲取查詢結果

[英]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);
});

http://mongoosejs.com/docs/promises.html

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM