Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 承诺所有地图更新数组_Javascript_Arrays_Node.js_Mongoose_Bluebird - Fatal编程技术网

Javascript 承诺所有地图更新数组

Javascript 承诺所有地图更新数组,javascript,arrays,node.js,mongoose,bluebird,Javascript,Arrays,Node.js,Mongoose,Bluebird,我使用的是蓝鸟和猫鼬,我在前面的函数中得到了一组用户。我想更新users,为数组中的每个用户设置属性hasCartrue或false function findCars(users) { return Promise.all(users.map((user) => { return Car.count({ _creator: new ObjectId(req.user), userId: user._id }) .then((car) =

我使用的是蓝鸟和猫鼬,我在前面的函数中得到了一组用户。我想更新
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
。我尝试了不同的方法,但没有成功。

它似乎是这样的。我做了一些简单的更改来伪造
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);
这将返回一个承诺,一秒钟后将以下内容记录到控制台:

[{"_id":1,"hasCar":true},{"_id":2,"hasCar":false},{"_id":3,"hasCar":true}]
注意,我最初使用的是更简单的

count: (user) => Promise.resolve(cars[user.userId])
但我想确保一些真正的异步。两种方式都没有任何问题


您可以在

上看到这一点。如果发现问题所在,您似乎无法添加在我的mongoose模型
用户
中不存在的属性。为了绕过它,我做了:

let updatedUser = user.toObject();
updatedUser.hasCar = !!car;
return updatedUser;

谢谢大家

而不是
users[index].hasCar=…
,为什么不简单地使用
user.hasCar=…
?而不是
if(car){…=true;}否则{…=false;}
为什么不简单地使用
..=Boolean(car)
?嘿,谢谢Phil的回答,我以前也尝试过这种方法,而且
返回用户
else
之后,不起作用,我仍然得到了老用户。“数组不想更新”到底是什么意思?如何测试阵列的更新?请向我们展示不起作用的代码,而不仅仅是您怀疑是问题所在的代码。你肯定不是在等更新。你的意思是数据库没有更新?非常感谢斯科特的时间,这让我抓狂,我终于找到了罪魁祸首,是我的猫鼬,我编辑了我的帖子。@John:很高兴你找到了它。您是在这里执行类似于我的测试还是通过调试器运行它?我们可以使用lean()和Mongoose查询来修改结果