承诺的意外结果

时间:2016-11-03 18:24:00

标签: javascript node.js

我正在尝试过滤填充的元素,具体取决于它是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 });
    });
});

希望有人能在这里说清楚。

感谢您的建议。

1 个答案:

答案 0 :(得分:2)

当你这样做时

json_allData = data;

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

现在你做的时候

Model.filterAnonymous(data.subdocument);

这会更改subdocument属性,该属性属于对象data的引用,而仍是同一个对象 json_allData正在引用。