我有一个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则永远不会被调用。