2016-11-03 16 views
1

私は、人口の多い要素を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

あなたはおそらく配列を突然変異させているでしょう。 – SLaks

+1

'json_allData = data;'ここで参照が共有されています。 –

答えて

1

あなたは

json_allData = data; 

を行うとあなたがdataと同じメモリにjson_allDataポイントを作ります。これは、両方の変数が同じオブジェクトを参照することを意味します。

は今、あなたはdataが参照しているオブジェクトの一部であるsubdocumentプロパティを変更

Model.filterAnonymous(data.subdocument); 

を行うとき、それはまだ同じオブジェクトjson_allDataが参照しているです。

+0

とてもクリア!ありがとう! – DevStarlight

+0

問題はありません。 – nem035