Javascript 不等待 For 循环。对象值不变

标签 javascript node.js mongodb object for-loop

我在 Node.js 中调用了 MongoDB。该调用返回一个用户列表,每个用户都有多个字段,例如姓名、电子邮件、 Angular 色。返回的字段之一是_id。当我将数据发送回应用程序的前端时,我想要一个不带下划线的此字段,因此我创建了一个 for 循环来迭代列表并添加新 key 。见下文:

//find all users
User.find({}).select("_id name email locked logins role created lastLogin").exec(function(err, users) {

  //error fetching users
  if (err) throw err;

  //add new id key
  for (var i=0; i<users.length; i++) {
    users[i].id = users[i]._id;
  }

  //send user list
  res.send(users);

});

现在我的问题是 res.send(users) 似乎没有发送更改后的版本,而只是发送原始数据。如果我将以下内容放入for循环中:

for (var i=0; i<users.length; i++) {
  users[i].id = users[i]._id;
  console.log(users[i].id);
}

然后我记录了新字段。但是,如果我在 for 循环之外和之后执行 console.log(users),我会得到原始的未更改数据。这就像执行 for 循环,然后在 for 循环 完成之前执行 res.send

最佳答案

我相信 Mongoose 会阻止您设置id,因为它没有在您的User模型中定义。如果您希望此功能正常工作,请在模型中添加一个值为 mongoose.Types.ObjectId 的字段 id

关于Javascript 不等待 For 循环。对象值不变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27746988/

相关文章:

javascript - 避免 "Cannot read property ' addEventListener' of null 的最佳方法”

mongodb - 选择匹配mongodb中两个字段的concat值的记录

mongodb - 如何在没有管理员权限的情况下在 Windows 上安装 MongoDB 3.X?

javascript - 如何根据另一个数组的匹配键值对返回一个数组?

javascript - VueJS,无法在同一方法内访问 "this"或 "self"

java - 有没有从javascript到Java bean(spring bean)执行RPC的框架?

node.js - 了解 Node/JavaScript 回调函数

javascript - Node JS 能否提示 HTML 页面发生变化?

node.js - NodeJs 安装失败,没有任何解释。这是日志

mongodb - 在 mongodb 集合中查找所有按字段最新且与另一个字段不同的文档