我使用蓝鸟和猫鼬,我在之前的功能中获得了一组用户。我想更新users
,为我的数组中的每个用户设置属性hasCar
为true或false。
function findCars(users) {
return Promise.all(users.map((user) => {
return Car.count({
_creator: new ObjectId(req.user),
userId: user._id
})
.then((car) => {
user.hasCar = !!car;
return user;
});
}))
.then(console.log);
}
问题是,在console.log中,这些用户没有设置属性hasCar
。我尝试了不同的方法但没有成功。
答案 0 :(得分:1)
发现错误,似乎你无法添加我的猫鼬模型User
中不存在的属性。绕过它我做了:
let updatedUser = user.toObject();
updatedUser.hasCar = !!car;
return updatedUser;
谢谢大家
答案 1 :(得分:0)
似乎工作原样。我做了一些简单的更改来伪造Car.count
并删除ObjectId
,它按预期工作:
const cars = {1: ['car a', 'car b'], 3: ['car c']};
const Car = {
count: (user) => new Promise((resolve, reject) =>
setTimeout(() => resolve(cars[user.userId]), 1000))
};
function findCars(users) {
return Promise.all(users.map((user) =>
Car.count({
userId: user._id
})
.then((car) => {
user.hasCar = !!car;
return user;
})
))
.then(console.log);
}
const users = [{_id: 1}, {_id: 2}, {_id: 3}];
findCars(users);
这将返回一个Promise,稍后一秒将以下内容记录到控制台:
[{"_id":1,"hasCar":true},{"_id":2,"hasCar":false},{"_id":3,"hasCar":true}]
注意,我最初使用的是更简单的
count: (user) => Promise.resolve(cars[user.userId])
但我想确保一些真正的异步。两种方式都没有任何问题。
您可以在 RunKit 上看到这一点。