一个承诺的意外结果

unexpected result for a promise

本文关键字:结果 意外 一个承诺      更新时间:2023-09-26

我试图过滤一个填充的元素取决于它是否为true || false,然后我删除(或不)一些字段。

也就是说,我实际上是在复制端点的代码并得到意外的响应:

router.get('/endpoint', tokenAuth, function (req, res) {
  var json_allData;
  Model.getInfo(req.query.info)
    .then(function (data) {
      json_allData = data;
      return Model.filterAnonymous(data.subdocument);
    })
    .then(function (data) { // << Data here is a subdocument filtered as expected
      res.status(200).json({ data: json_allData }); // << WTF??? data has been filtered in the json_allData but I'm not doing anything!
    })
    .catch(function (error) {
      res.status(400).json({ msg: error });
    });
});

希望有人能指点一下。

谢谢你的建议

当你这么做的时候

json_allData = data;

使json_allData指向与data相同的内存。这意味着两个变量引用同一个对象。

现在当你做

Model.filterAnonymous(data.subdocument);

这改变了data所引用对象的一部分subdocument属性,即仍然是json_allData所引用的相同对象