Александр прав, это безопасность Windows, которая не позволяет этому процессу работать, но команда powershell не работала для меня. вот что я сделал:
Теперь ваш пользователь может выполнить эту программу. Ура!
Вы можете разбить свой код на несколько функций, чтобы лучше видеть, что происходит. Проблема, с которой вы сталкиваетесь, заключается в том, что вы хотите получить доступ к значению, которое было возвращено из асинхронного вызова в основной функции (глобальная область), что невозможно из-за того, как работают асинхронные вызовы.
Во-первых, давайте напишем функцию, которая принимает только одну область в качестве входных данных и возвращает обещание, содержащее статистику для этой области, возвращенную из базового вызова cw.getMetricStatistics
.
function getRegionMetrics(regionParams) {
return new Promise((resolve, reject) => {
cw.getMetricStatistics(regionParams, function(err, data) {
if (err) {
console.log(err, err.stack);
reject(err);
} else {
var TabJSON = [];
for (var i = 0; i < 5; i++) {
TabJSON.push(data.Datapoints[i]);
}
resolve(TabJSON);
}
});
});
}
Далее вам нужна функция, которая будет вызывать вышеуказанную функцию для каждой области, которую вы хотите обработать. Здесь вы можете использовать функцию map
для создания массива обещаний и Promise.all
для разрешения этого массива.
function getAllMetrics(regions) {
return Promise.all(
regions.map(regionParams => getRegionMetrics(regionParams))
);
}
Ваша логика обработки завершена. Теперь, когда вам нужно получить статистику для массива регионов, просто вызовите функцию getAllMetrics
и объедините ее с помощью метода then
.
getAllMetrics(regions).then(res => {
console.log(res); // here "res" is your "globalTab"
}).catch(err => {
console.log(err);
});
Где regions
- ваш arr
.