一个承诺意想不到的结果

我试图过滤一个填充元素,这取决于一个true || false 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 }); }); }); 

希望有人可以在这里投下一些光。

感谢您的build议。

当你这样做

 json_allData = data; 

你让json_allData指向与data相同的内存。 这意味着两个variables都引用同一个对象。

现在当你这样做

 Model.filterAnonymous(data.subdocument); 

这改变了作为对象data一部分的subdocument属性被引用,并且仍然是 json_allData引用的同一对象