我写了下面的代码来读取xml并返回一个hashmap:
this.xmlObjectRepositoryLoader = function (xmlPath, callback){
var map = {}
var innerMap = {};
var el;
fs.readFile(xmlPath, "utf-8",function(err, data) {
if(err){
console.log('File not found!!')
}
else{
console.log(data)
var doc = domparser.parseFromString(data,"text/xml");
var els = doc.getElementsByTagName("Child");
for(var i =0 ; i< els .length;i++){
var e = elements[i];
eName = e.getAttribute("a");
var params = elm.getElementsByTagName("abc");
innerMap = {};
for(var j =0 ; j< params.length;j++){
var param = params[j];
var b = param.getAttribute("b");
var c= param.getAttribute("c");
innerMap[b] = c;
}
map[el] = innerMap;
innerMap={};
};
}
console.log(map);
return callback(map);
});
};
我从下面的方法调用xmlObjectRepositoryLoader
,但它返回错误TypeError: callback is not a function
:
this.objectLoader = function(filePath){
if (filePath.includes(".xml")) {
console.log(this.xmlObjectRepositoryLoader(filePath));
}
您能否告诉我错误的地方?我该如何解决?
答案 0 :(得分:7)
您尝试拨打callback
,此处:
return callback(map);
但是,您没有将回调传递给xmlObjectRepositoryLoader
:
console.log(this.xmlObjectRepositoryLoader(filePath));
请改为:
this.xmlObjectRepositoryLoader(filePath, function(map){
console.log(map)
});
答案 1 :(得分:3)
因为我没有评论的声誉。我正在回答这个问题。对不起。你错过了下面代码中的参数
this.objectLoader = function(filePath){
if (filePath.includes(".xml")) {
console.log(this.xmlObjectRepositoryLoader(filePath));
}
this.xmlObjectRepositoryLoader(文件路径)
在上面一行。
你可以在函数 xmlObjectRepositoryLoader 中包含一个验证来检查回调是否是一个函数,然后调用它来避免抛出错误(如果它不是一个强制参数)。