Javascript 如何在nodejs中将作用域传递给回调函数?
我使用nodejs和xml2js模块。我正在读取一个XML文件,并尝试在XML转换为json对象后发出一个事件。我的代码如下所示:Javascript 如何在nodejs中将作用域传递给回调函数?,javascript,node.js,Javascript,Node.js,我使用nodejs和xml2js模块。我正在读取一个XML文件,并尝试在XML转换为json对象后发出一个事件。我的代码如下所示: var fs = require('fs'), util = require('util'), events = require('events'), xml2js = require('xml2js'); var CIRCUITMODELSFILENAME = "ControlCircuitModels.xml"; var CIRCUITPARTMODELSFI
var fs = require('fs'),
util = require('util'),
events = require('events'),
xml2js = require('xml2js');
var CIRCUITMODELSFILENAME = "ControlCircuitModels.xml";
var CIRCUITPARTMODELSFILENAME = "ControlCircuitParts.xml";
var circuitModels, circuitPartModels;
function ModelController() {
if (false === (this instanceof ModelController)) {
return new ModelController();
}
events.EventEmitter.call(this);
};
util.inherits(ModelController, events.EventEmitter);
ModelController.prototype.load = function (baseDir) {
var parser = new xml2js.Parser({
normalize: true,
trim: true,
explicitArray: false
});
fs.readFile(baseDir + "/" + CIRCUITMODELSFILENAME, function (err, data) {
parser.parseString(data, function (err, result) {
circuitModels = result;
console.log('circuit models loaded');
parser.reset();
fs.readFile(baseDir + "/" + CIRCUITPARTMODELSFILENAME, function (err, data) {
parser.parseString(data, function (err, result) {
circuitPartModels = result;
console.log('circuit part models loaded');
moduleReady = true;
this.emit("modelsloaded", null);
});
});
});
});
};
// public interface
exports.ModelController = ModelController;
问题是发出事件时的作用域丢失
this.emit("modelsloaded", null);
这没有从EventEmitter继承发射
如何将作用域传递给parser.parseString函数
谢谢
Chris不确定这是否是最好的解决方案,但这是可行的(没有直截了当):
fs.readFile(baseDir + "/" + CIRCUITMODELSFILENAME, function (err, data) {
parser.parseString(data, function (err,result) {
circuitModels = result;
parser.reset();
fs.readFile(baseDir + "/" + CIRCUITPARTMODELSFILENAME, function (err, data) {
circuitPartModels = result;
console.log('circuit models loaded');
parser.parseString(data, function (err, result) {
console.log('circuit part models loaded');
this.emit("modelsloaded", null);
moduleReady = true;
circuitPartModels = result;
}.bind(this));
}.bind(this));
}.bind(this));
}.bind(this));