У меня есть код 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 никогда не вызывается.