javascript - node/mongo/functions/scoping 的奇怪行为

标签 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;
     });

     console.log(params);

当您进入 findOne 时,文档值和 params["category"] 值就很好。然而,在该范围之外,它会消失并且 params["category"] 变为“未定义”。现在,刷新页面一次后,它就恢复正常行为,并且在 Node 的其余运行过程中似乎保持这种状态。

为什么会出现这种行为?

最佳答案

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

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

此外,请参阅类似问题的答案,例如 this one .

关于javascript - node/mongo/functions/scoping 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9157848/

相关文章:

javascript - 如何在填充特定值时调用 Vue.js 组件上的方法,但仅调用一次

javascript - Node.js AJAX 路由在评估引用的函数之前返回数据

node.js - 具有 Node.js 后端的移动应用程序 - 为客户端开发选择什么框架?

javascript - 如何在 Vue 向导表单中使用字段验证?

javascript - 如何使用安全方法删除 Javascript 数组的元素?

javascript - 帮我创建正则表达式

node.js - Node.js 是这个应用程序的正确选择吗?

javascript - Mongoose .js : force always populate

node.js - 如何在 mongoose hook 中保存 userId?

mongodb-erlang Erlang 驱动示例