Javascript 许诺的意外结果

Javascript 许诺的意外结果,javascript,node.js,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; retu

我试图根据填充的元素是否为
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 });
    });
});
router.get('/endpoint',tokenAuth,function(req,res){
var-json_-allData;
Model.getInfo(req.query.info)
.then(功能(数据){
json_allData=数据;
返回Model.filterAnonymous(data.subdocument);
})
.then(函数(数据){/当您这样做时

json_allData = data;
json\u allData
指向与
data
相同的内存。这意味着两个变量引用相同的对象

现在当你这么做的时候

Model.filterAnonymous(data.subdocument);

这改变了
子文档
属性,该属性是对象
数据
正在引用的一部分,并且仍然是相同的对象
json\u allData
正在引用。

您可能正在修改数组。
json\u allData=data;
共享此处发生的引用。