每次编译都有不同的输出
Different output at each compilation
当我编译时,我的参数 "derniere" 的输出不同..
我的印象是他随机运行我的JSON
我在
的循环中使用 JSON
var AWS = require('aws-sdk');
var arr = [{
"region": "eu-west-1",
"Value": "https://***",
"cle": "1"
}, {
"region": "eu-west-1",
"Value": "https://***",
"cle": "2"
}, {
"region": "eu-west-1",
"Value": "https://***",
"cle": "3"
},]
//************* END JSON ********************
for(key in arr){
console.log(arr[key]);
var region = arr[key].region;
var Value_t = arr[key].Value;
// ********** CONFIGURATION**************
AWS.config.region = region;
var cw = new AWS.CloudWatch({apiVersion: '2010-08-01'});
var startDate = new Date();
var endDate = new Date();
startDate.setHours(startDate.getHours()-1);
var params2 = {
StartTime: startDate,
EndTime: endDate,
Namespace: 'Lambda-Ping/HTTP', /* required */
Period: 300, /* required */
MetricName: 'Latency', /* required */
Dimensions: [{
Name: 'Endpoint', /* required */
Value: Value_t
},
/* more items */
],
Statistics: [
'Average'
/* more items */
],
};
// ************ END CONFIGURATION ************
cw.getMetricStatistics(params2, function(err, data) {
if (err){
console.log(err, err.stack); // an error occurred
}
else{
for (var i=0;i<5;i++){
var tableau = data.Datapoints[i].Average;
}
derniere.push(parseInt(tableau));
console.log("Derniere: "+derniere+"\n");
// OUTPUT different Derniere: 400, 1000, 200
// OUTPUT different Derniere: 1000, 200, 400
// OUTPUT need Derniere: 200, 1000, 400
}
});
}
有时我有:
- 三线:200,400,1000
- 三线:400,200,1000
- 三线:1000,400,200
但我想要的结果是:
- 臀部:200,1000,400
...还有这个,对于每个编译。
顺序不可预测的原因是getMetricStatistics
执行了一个异步的HTTP请求。其中一些调用可能 return 响应比其他调用更快,可能导致与您调用 getMetricStatistics
.
的顺序不同的顺序
以下是解决方法。首先确保 declare key
而不是使其成为隐式全局(这是不好的做法)。在这种情况下,它 应该 是一个块范围变量,所以使用 const
或 let
,而不是 var
:
for (const key in arr){
// ^^^^^
然后在getMetricStatistics
的回调中不要使用push
,而是使用key
来存储响应:
derniere[key] = parseInt(tableau);
现在响应仍然以不可预测的顺序出现,但您将它们存储在可预测的位置。最后,数组derniere
就完成了。
当我编译时,我的参数 "derniere" 的输出不同..
我的印象是他随机运行我的JSON
我在
的循环中使用 JSONvar AWS = require('aws-sdk');
var arr = [{
"region": "eu-west-1",
"Value": "https://***",
"cle": "1"
}, {
"region": "eu-west-1",
"Value": "https://***",
"cle": "2"
}, {
"region": "eu-west-1",
"Value": "https://***",
"cle": "3"
},]
//************* END JSON ********************
for(key in arr){
console.log(arr[key]);
var region = arr[key].region;
var Value_t = arr[key].Value;
// ********** CONFIGURATION**************
AWS.config.region = region;
var cw = new AWS.CloudWatch({apiVersion: '2010-08-01'});
var startDate = new Date();
var endDate = new Date();
startDate.setHours(startDate.getHours()-1);
var params2 = {
StartTime: startDate,
EndTime: endDate,
Namespace: 'Lambda-Ping/HTTP', /* required */
Period: 300, /* required */
MetricName: 'Latency', /* required */
Dimensions: [{
Name: 'Endpoint', /* required */
Value: Value_t
},
/* more items */
],
Statistics: [
'Average'
/* more items */
],
};
// ************ END CONFIGURATION ************
cw.getMetricStatistics(params2, function(err, data) {
if (err){
console.log(err, err.stack); // an error occurred
}
else{
for (var i=0;i<5;i++){
var tableau = data.Datapoints[i].Average;
}
derniere.push(parseInt(tableau));
console.log("Derniere: "+derniere+"\n");
// OUTPUT different Derniere: 400, 1000, 200
// OUTPUT different Derniere: 1000, 200, 400
// OUTPUT need Derniere: 200, 1000, 400
}
});
}
有时我有:
- 三线:200,400,1000
- 三线:400,200,1000
- 三线:1000,400,200
但我想要的结果是:
- 臀部:200,1000,400
...还有这个,对于每个编译。
顺序不可预测的原因是getMetricStatistics
执行了一个异步的HTTP请求。其中一些调用可能 return 响应比其他调用更快,可能导致与您调用 getMetricStatistics
.
以下是解决方法。首先确保 declare key
而不是使其成为隐式全局(这是不好的做法)。在这种情况下,它 应该 是一个块范围变量,所以使用 const
或 let
,而不是 var
:
for (const key in arr){
// ^^^^^
然后在getMetricStatistics
的回调中不要使用push
,而是使用key
来存储响应:
derniere[key] = parseInt(tableau);
现在响应仍然以不可预测的顺序出现,但您将它们存储在可预测的位置。最后,数组derniere
就完成了。