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

Javascript not waiting for For loop. Object values not changing

本文关键字:对象 For 等待 Javascript 循环      更新时间:2023-09-26

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

//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 loop

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

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

我相信

猫鼬阻止你设置id,因为它没有在你的User模型中定义。如果您希望这样做,请在模型中添加一个具有值mongoose.Types.ObjectId字段id