我使用AWS-SDK来描述特定区域中的所有实例。我有超过100个实例。我必须列出instanceId,volumeId和所有100个实例的设备名称。
我的代码看起来像这样。我希望在 miniregionoregon.json 文件中有100个不同的实例。但我得到的只是一个重复100次的实例。我在 params 上做了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();
}
}());
});
答案 0 :(得分:2)
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
。