Node.js Array.push无法正常工作

Node.js Array.push无法正常工作,node.js,amazon-web-services,Node.js,Amazon Web Services,我使用AWS-SDK来描述特定区域中的所有实例。我有100多个实例。我必须列出所有100个实例的instanceId、volumeId和devicename 我的代码看起来像这样。我希望在我的miniRegionRegon.json文件中有100个不同的实例。但我得到的只是一个实例被重复了100次。我在参数上登录了console.log-这很好,因为我得到了100个不同的值ste 但paramArray是有问题的paramArray.push(param)似乎没有预期的结果。我已经研究了将近一个

我使用AWS-SDK来描述特定区域中的所有实例。我有100多个实例。我必须列出所有100个实例的instanceId、volumeId和devicename

我的代码看起来像这样。我希望在我的miniRegionRegon.json文件中有100个不同的实例。但我得到的只是一个实例被重复了100次。我在参数上登录了console.log-这很好,因为我得到了100个不同的值ste

但paramArray是有问题的paramArray.push(param)似乎没有预期的结果。我已经研究了将近一个小时,我决定这肯定需要一双新的眼睛

var fs = require('fs');
var file = __dirname + 'region_oregon.json';

fs.readFile(file, 'utf8', function (err, data) {
    if (err) {
        console.log('Error: ' + err);
        return;
    }

    data = JSON.parse(data);

    var outerindex = 0;
    var params = {};
    var paramArray = [];

    (function getDataRecur() {

        if (outerindex > data.length - 1) {
            console.log(paramArray);
            var fs = require('fs');
            fs.writeFile(__dirname + 'miniregionoregon.json', JSON.stringify(paramArray), function (err) {
                if (err) {
                    console.log(err);
                } else {
                    console.log("The file was saved!");
                }
            });
        } else {
            var instances = data[outerindex].Instances;
            console.log('instances_length', instances.length);
            var innerindex = 0;

            (function getInstanceRecur() {
                if (innerindex > instances.length - 1) {
                    console.log('done reading instances');
                    return;
                } else {
                    //console.log(dataArr[innerindex].Instances[0].InstanceId);
                    console.log(innerindex);
                    params.InstanceId = instances[innerindex].InstanceId;
                    params.VolumeId = instances[innerindex].BlockDeviceMappings[0].Ebs.VolumeId;
                    params.Device = instances[innerindex].BlockDeviceMappings[0].DeviceName;

                    paramArray.push(params);

                    innerindex++;
                    getInstanceRecur();
                }
            }());


            outerindex++;
            getDataRecur();
        }
    }());


});

params
仅初始化一次。所以,每次排队的时候

params.InstanceId = instances[innerindex].InstanceId;
params.VolumeId = instances[innerindex].BlockDeviceMappings[0].Ebs.VolumeId;
params.Device = instances[innerindex].BlockDeviceMappings[0].DeviceName;

paramArray.push(params);

运行时,它们作用于同一对象-覆盖这3个属性,然后将对该对象的另一个引用推送到数组上。您应该在设置这些属性并按下它之前初始化
params

是在整个集合中重复的集合中的最后一个吗?如果是这样,您就有范围问题。如果是这样的话,我会提供一个完整的解释。