当我编译时,我的参数“ 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
}
});
}
有时候我有:
但是我想要的结果是:
...还有这个,用于每次编译。
答案 0 :(得分:0)
顺序不可预测的原因是getMetricStatistics
执行HTTP请求,该请求是异步的。这些呼叫中的某些呼叫返回的响应可能比其他呼叫更快,可能导致与呼叫getMetricStatistics
的次序不同。
这是解决问题的方法。首先,请确保声明 key
,而不是使其成为隐式全局变量(这是不好的做法)。在这种情况下,它应该是一个块范围变量,因此请使用const
或let
,而不要使用var
:
for (const key in arr){
// ^^^^^
然后在getMetricStatistics
的回调中不要使用push
,而要使用key
来存储响应:
derniere[key] = parseInt(tableau);
现在,响应仍然处于不可预测的顺序,但是您将它们存储在可预测的位置。最后,数组derniere
将完成。