Я могу использовать повышение на uclibc Linux?

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

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

7
задан bmdhacks 27 February 2009 в 01:48
поделиться

4 ответа

Мы используем Повышение вместе с GCC 2.95.3, libstdc ++ и STLport на платформе ARMv4, работающей uClinux. Некоторые части Повышения не совместимы с GCC 2.x, но те, которые являются работами хорошо в нашем особом случае. Библиотеки, что мы используем большинство, являются date_time, связывают, функционируют, кортеж и поток.

Некоторые библиотеки, с которыми у нас были проблемы, были лямбдой, shared_pointer и формат. Эти проблемы были, скорее всего, вызваны нашей версией GCC, так как это имеет проблемы, когда Вы имеете, слишком многие включают или глубокие уровни шаблонных структур.

Если возможный я рекомендовал бы Вам выполнить набор тестов повышения со своим конкретным набором инструментальных средств для обеспечения совместимости. По крайней мере Вы могли скомпилировать собственный набор инструментальных средств, чтобы удостовериться, что Ваши версии библиотеки совместимы.

Мы не использовали uClibc ++, потому что это не то, что рекомендует наш поставщик набора инструментальных средств, таким образом, я не могу прокомментировать ту конкретную комбинацию.

2
ответ дан 7 December 2019 в 12:26
поделиться

Я погуглил "uclibc stlport". Кажется, что существует по крайней мере несколько версий uclibc, для которого может быть скомпилирован stlport (см. это). Учитывая, что, я сказал бы, что Повышение является всего несколькими шагами компиляции далеко. Я прочитал сообщение David Abrahams (кто активный член сообщества повышения), который говорит, что Повышение не зависит непосредственно от используемого libc. Но некоторые библиотеки могут все еще вызвать проблемы, Повышение. Python, например, так как это зависит от чего-то еще (Python в моем примере), который могло бы быть трудно скомпилировать с uclibc.

Надеюсь, это поможет

1
ответ дан 7 December 2019 в 12:26
поделиться

Я не попробовал, но я ничего не знаю о uclibc, который препятствовал бы тому, чтобы Повышение работало.

Попробуйте его и посмотрите то, что происходит, сказал бы я.

0
ответ дан 7 December 2019 в 12:26
поделиться

Мы используем многие из библиотек Boost (нить, файловая система, сигналы, функция, связывание, любая, asio, smart_ptr , tuple) на Arcom Vulcan , который, по общему признанию, довольно мощный для встроенного устройства (64M RAM, 533MHz XScale). Все работает красиво.

GCC 3.4, но мы не используем uclib ++ (Arcom предоставляет набор инструментов, включающий libstd ++).

Многие встраиваемые устройства будут успешно запускать многие из библиотек Boost, предполагая приличную поддержку компилятора. Просто позаботьтесь об использовании. Библиотеки Boost повышают уровень абстракции, и может быть легко использовать больше ресурсов, чем вы думаете.

2
ответ дан 7 December 2019 в 12:26
поделиться
Другие вопросы по тегам:

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