Javascript 节点/mongo/函数/作用域的奇怪行为

Javascript 节点/mongo/函数/作用域的奇怪行为,javascript,node.js,mongodb,express,Javascript,Node.js,Mongodb,Express,我有这条express.js路线 app.get("/explore/:category?", checkCategory, function(req, res){ var params = new Array(); params["path"] = req.route.path; Category.findOne({hash:category}, function (err, doc) { params["category"] = doc

我有这条express.js路线

app.get("/explore/:category?", checkCategory, function(req, res){   
     var params = new Array();
     params["path"] = req.route.path;

     Category.findOne({hash:category}, function (err, doc) {
         params["category"] = doc;
     });

     console.log(params);
当您在findOne中时,doc值和params[“category”]值就可以了。但是,在该范围之外,它将消失,params[“category”]将变为“undefined”。现在,在刷新页面一次后,它将恢复正常行为,并且在节点的其余运行过程中似乎一直保持这种状态


为什么会发生这种行为?

之所以会发生这种情况,是因为在传递给findOne的回调之前调用了console.log。如果您这样更改它,它将按预期工作:

Category.findOne({hash:category}, function (err, doc) {
    params["category"] = doc;
    console.log(params);
});
另外,请参见类似问题的答案,如