等待猫鼬高管完成

时间:2019-07-18 23:08:46

标签: javascript node.js mongodb mongoose

在对Moongose和NodeJS执行查询时遇到问题

我正在尝试使用Moongose进行搜索,并根据结果将其分配给变量,但是当我打印该变量时,它显示为空

  let queryDict;

  query.exec(function (err, item) {
    if (err) return handleError(err);
    if (item === null || item.length === 0) {
        queryDict = { 
            status: 'empty',
            comment: 'some comment' 
        };
    }
    else { queryDict = item }
});

console.log(`queryDict: ${queryDict}`);

预期的行为是在变量中包含一些内容。请帮我完成这个任务

1 个答案:

答案 0 :(得分:1)

猫鼬操作为asynchronous,因此在执行queryDict语句时,undefined将为console.log

您需要将console.log移至所提供的回调的主体中,以便能够从查询中访问该值。

请不要担心这似乎有点令人困惑,如果您是该范式的新手,那么JavaScript的异步特性很容易实现。我建议阅读上面链接的文章,并试用猫鼬文档中的示例。

或者,您可以像这样使用async/await重写它:

async function executeQuery () {
    try {
    const item = await query.exec()

    if (item === null || item.length === 0) {
        queryDict = { 
            status: 'empty',
            comment: 'some comment' 
        };

        console.log(`queryDict: ${queryDict}`);
        }
    }
    catch (err) {
        handleError(err);
    }
}


executeQuery()