2013-03-18 3 views
0

나는 nodejs와 xml2js 모듈을 사용합니다. 나는 XML 파일을 읽으며 xml이 json 객체로 변환 된 후 이벤트를 내보내려고한다. 내 코드는 다음과 같습니다nodejs에서 콜백 함수에 범위를 전달하는 방법은 무엇입니까?

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 함수에 전달할 수 있습니까?

감사 크리스

답변

0

이 최적의 솔루션이 작동 비스 (직선 foreward 보이지 않는) 경우 확실하지 :

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)); 
관련 문제