MongoDB .findOne范围

时间:2016-10-31 17:36:08

标签: javascript node.js mongodb mongoose

我的var范围有问题。

var max;
    ClassModel.findOne({ class: '1a' }, function (err, class1a) {
        if (err) return handleError(err);
        max = class1a.members;
        console.log(max);
    });
console.log(max);

为什么第一个日志记录正确的值,但第二个日志是未定义的?

1 个答案:

答案 0 :(得分:1)

第二个console.log显示undefined,因为mongoose的findOne是异步的。当您显示第一个console.log时,结果已经处理,而第二个没有。

  

Mongoose异步操作,如.save()和查询,返回   承诺/ A +符合承诺。这意味着你可以做的事情   像MyModel.findOne({})。then()和yield MyModel.findOne({})。exec()   (如果您正在使用co)。

你可以做的一件事就是检查它什么时候完成,比如......

 var max;
 var query = ClassModel.findOne({ class: '1a' }, function (err, class1a) {
     if (err) return handleError(err);
     return class1a.members;
});

query.then(function(data) {
    console.log(data); // will show class1a.members value
});

Docs