我的var范围有问题。
var max;
ClassModel.findOne({ class: '1a' }, function (err, class1a) {
if (err) return handleError(err);
max = class1a.members;
console.log(max);
});
console.log(max);
为什么第一个日志记录正确的值,但第二个日志是未定义的?
答案 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
});