Javascript 没有等待 For 循环。对象值不变
Javascript not waiting for For loop. Object values not changing
我在 Node.js 打给 MongoDB。调用 returns 一个用户列表,每个用户都有各种字段,例如姓名、电子邮件、角色。返回的字段之一是 _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
,然后在 for loop
完成之前执行 res.send
。
我认为 mongoose 阻止您设置 id
因为它没有在您的 User
模型中定义。如果您希望它起作用,请在您的模型中添加一个值为 mongoose.Types.ObjectId
的字段 id
。
我在 Node.js 打给 MongoDB。调用 returns 一个用户列表,每个用户都有各种字段,例如姓名、电子邮件、角色。返回的字段之一是 _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
,然后在 for loop
完成之前执行 res.send
。
我认为 mongoose 阻止您设置 id
因为它没有在您的 User
模型中定义。如果您希望它起作用,请在您的模型中添加一个值为 mongoose.Types.ObjectId
的字段 id
。