我得到了recentdate变量的未定义值。当我使用控制台打印值时,它会成功打印值。当我试图将值保存在变量(recentdate(中时,它会给出未定义的。我想把这个值存储在变量中,这样我就可以进一步使用它了。
var recentdate ;
TimeHistory.find().sort([{ CreatedDated: 'DESC' }]).limit(1).exec(function (err, date) {
console.log("RecentDate" + JSON.stringify(date[0].CreatedDated));//print the value sucessfully
recentdate = JSON.stringify(date[0].CreatedDated);//getting undefined value
});
当您将函数作为回调传递时(就像将函数传递给.exec
一样,该函数通常异步运行。这意味着传递的函数中的内容可能会在下面的代码之后运行。例如:
console.log('This will run first');
TimeHistory.find({}).exec(function() {
console.log('This will run third and last');
});
console.log('This will run second');
控制台中此代码的输出为:
-> This will run first
-> This will run second
-> This will run third and last
因此,如果您尝试在exec
方法下面使用recentDate
,那么里面的东西还没有运行,并且recentDate
仍然是未定义的。
有很多解决方案,但一个快速而简单的解决方案是将使用recentDate
的代码放在回调中:
var recentDate;
TimeHistory.find({}).exec(function(err, results) {
recentDate = results[0].date; // or whatever
// now continue your processing here
});
// don't add any more code down here