несколько вызовов snmp getsubtree приводят к одному обратному вызову - PullRequest
0 голосов
/ 05 июля 2019

У меня есть код JavaScript, который делает несколько вызовов snmp.getsubtree в цикле, но обратный вызов вызывается только один раз.Разве несколько обратных вызовов свернуты в один?

Я не являюсь разработчиком javascript, поэтому не обращаю внимания на все асинхронные тонкости, но не должен ли каждый вызов вызывать обратный вызов?

function reportWifiMetrics() {

    getMacAddresses();
    getMetrics( wifi_config.toLog.byClient, parse_ByClient_Metrics);
    getMetrics( wifi_config.toLog.bySsid,   parse_BySSID_Metrics);
}

function getMetrics( metrics, parsefunc ) {

    var mkeys = Object.keys( metrics );
    mkeys.forEach( function (key) {
        var mib = metrics[key];
        snmp_session.getSubtree({oid:toArray(mib), host: wifi_config.host}, function( err, res){
            if (err) { console.error('Error getting metric (' + key + ' fron SNMP - ' + err); }
            else {
                parsefunc(key,res);
            }
        });
    });
}

function parse_BySSID_Metrics( key, raw_data ) {

    raw_data.forEach(function( rec ){
        var ssid_index = rec.oid[rec.oid.length-2];
        var metric     = rec.value;
        var ssidblob   = ssidMap[ ssid_index ];
        ssidblob.metrics[key] = metric;
    });
}

В первом вызове getMetrics он зацикливается на четырех ключах, во втором он также зацикливается на четырех ключах.Я ожидал бы, что каждый обратный вызов будет вызван четыре раза, но parse_ByClient_Metrics вызывается только один раз, а parse_BySSID_Metric никогда не вызывается.

...