Выходной пустой массив - (асинхронный)

Александр прав, это безопасность Windows, которая не позволяет этому процессу работать, но команда powershell не работала для меня. вот что я сделал:

  • Откройте проводник Windows и перейдите к example.exe
  • Щелкните правой кнопкой мыши по нему и выберите «Свойства»
  • Перейти на вкладку «Безопасность» и нажмите кнопку «Редактировать»
  • Выберите свое имя пользователя в верхней части окна, а внизу нажмите «Полный контроль» или, по крайней мере, «Чтение и выполнение»
  • Нажмите OK, чтобы избавиться от этих полей

Теперь ваш пользователь может выполнить эту программу. Ура!

0
задан marcilles Stanislas 18 January 2019 в 08:55
поделиться

1 ответ

Вы можете разбить свой код на несколько функций, чтобы лучше видеть, что происходит. Проблема, с которой вы сталкиваетесь, заключается в том, что вы хотите получить доступ к значению, которое было возвращено из асинхронного вызова в основной функции (глобальная область), что невозможно из-за того, как работают асинхронные вызовы.

Во-первых, давайте напишем функцию, которая принимает только одну область в качестве входных данных и возвращает обещание, содержащее статистику для этой области, возвращенную из базового вызова 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.

0
ответ дан Matus Dubrava 18 January 2019 в 08:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: