Als temporäre Lösung, die ich dieses Ereignis emittierende rekursive Funktion schrieb (ich dies als akzeptierte Antwort bin nicht markiert, da ich auf jeden Fall etwas in den Zeilen der Änderung eines Argumentwert in der WINREG Bibliothek erwartet wurde)
Da ich gerade NodeJS Lernen, machte ich eine Komponente aus der es für Spaß:
var EventEmitter = require('events').EventEmitter;
function RegistryDataEvents(env_var_name) {
this.events = undefined;
this.initEvents(env_var_name);
} // cunstruct RegistryDataEvents
RegistryDataEvents.prototype.initEvents = function(env_var_name) {
this.events = new EventEmitter();
var _that = this;
process.nextTick(
function() {
_that.retrieveClientName(0, false, "", env_var_name);
}
);
}; // initEvents
module.exports.RegistryDataEvents = RegistryDataEvents;
RegistryDataEvents.prototype.rerun = function(env_var_name) {
this.retrieveClientName(0, false, "", env_var_name);
}; // rerun
RegistryDataEvents.prototype.retrieveClientName = function(count,
found,
result,
env_var_name) {
var _that = this;
if (count === 0) {
_that.events.emit('start', result);
}
if (found) {
_that.events.emit('success', result);
return;
}
var key = "\\Volatile Environment\\"+ count +"\\";
var Registry = require('./registry.js'),
regKey = new Registry({
hive: Registry.HKCU,
key: key
});
regKey.get(env_var_name, function(err, item) {
if (err) {
// obviously this is a downfall of the module, any suggestions will be appreciated :)
if (count > 100) {
_that.events.emit('failure', result, err, count);
return;
}
_that.retrieveClientName(++count, false, "", env_var_name);
}
else {
found = true;
_that.retrieveClientName(++count, true, item.value, env_var_name);
return;
}
});
return;
}; // retrieveClientName
Nutzungs
var RegistryDataEvents = require('./reg_data_evts.js').RegistryDataEvents;
// Register the event + listeners
var reg_data_evts = new RegistryDataEvents("CLIENTNAME");
// handle listener logic
reg_data_evts.events.on('start', function(result) {
console.log("Started " + result);
});
reg_data_evts.events.on('success', function(result) {
console.log("Success: " + result);
});
reg_data_evts.events.on('failure', function(result, err, count) {
console.log("Failure: " + result + " - " + err + " after " + count + " attempts");
});
// just to show u can rerun the retrieveClientName method
reg_data_evts.rerun("CLIENTNAME");
// just to show u can rerun the retrieveClientName method
reg_data_evts.rerun("CLIENTNAME");
Sehen Sie sich das asynchrone Modul an. Es gibt viele Antworten darüber auf SO. https://github.com/caolan/async –