node/mongo/functions/scopeing的怪异行为

Weird behavior with node/mongo/functions/scoping

本文关键字:scopeing mongo functions node      更新时间:2023-09-26

我有这个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"]变为"未定义"。现在,在刷新页面一次后,它会恢复正常行为,并且在节点的其余运行过程中似乎一直保持这种状态。

为什么会出现这种行为?

发生这种情况是因为console.log在您传递给findOne的回调之前被调用。如果你这样改变它,它会像预期的那样工作:

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

另外,请参阅类似问题的答案。