(私は間違いなくWINREGライブラリ内の引数の値を変更するラインで何かを期待していたことから、受け入れ答えとしてこれをマークするわけではありません) 私はちょうどNodeJSを学んでおりますので、私は楽しみのためにそれからコンポーネントを作った:
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
使用
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");
非同期モジュールを見てください。それについての多くの答えがあります。 https://github.com/caolan/async –