我对猫鼬中变量的范围存在疑问。我的代码是这样的:var blogUserId;blogs.forEach(function(blog, index) { User.findOne({'username': blog.username}, function(err, user) { blogUserId = user._id; console.log(blogUserId); }); console.log(blogUserId); Blog.find({'title': blog.title}, function(err, blogs) { if (!err && !blogs.length) { console.log(blogUserId); Blog.create({title: blog.title, author: blogUserId, body: blog.body, hidden: blog.hidden}); } if (err) { console.log(err); } });});这是仅用于开发的种子文件的一部分,但我很困惑为什么它不起作用。 blogs只是要加载到集合中的对象数组。我已经搜索了所有类似的答案,但没有找到可以解释此问题的正确答案。 最佳答案 调用blogUserId时未设置Blog.find()。您必须以不同的方式嵌套它,如下所示:var blogUserId;blogs.forEach(function(blog, index) { User.findOne({'username': blog.username}, function(err, user) { blogUserId = user._id; console.log(blogUserId); Blog.find({'title': blog.title}, function(err, blogs) { if (!err && !blogs.length) { console.log(blogUserId); Blog.create({title: blog.title, author: blogUserId, body: blog.body, hidden: blog.hidden}); } if (err) { console.log(err); } }); });});我尚未对其进行测试,所以我不确定您的代码中是否没有其他错误,但绝对是您正在调用Blog.find的问题,该问题期望blogUserId可能在回调。可以使用命名回调以更具可读性的方式编写它。在Node中工作时,需要记住您正在异步环境中工作。 10-06 08:08