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

时间:2015-01-02 18:45:36

标签: javascript node.js mongodb object for-loop

我在Node.js中调用了MongoDB。该调用返回一个用户列表,每个用户都有各种字段,如姓名,电子邮件,角色。返回的其中一个字段是_id。当我将数据发送回应用程序的前端时,我想要一个没有下划线的字段,所以我创建了一个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,然后在res.send完成它之前执行for loop

1 个答案:

答案 0 :(得分:4)

我认为mongoose阻止您设置id,因为它未在User模型中定义。如果您希望这样做,请在模型中添加值id的字段mongoose.Types.ObjectId