2016-09-09 89 views
0

我已經寫了下面的代碼讀取XML,並返回一個HashMap:的NodeJS:類型錯誤:回調不是一個函數

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

希望在投降之前,人們應該也有理由相信。反正謝謝你看看。 – Abhinav

回答

3

你試圖調用callback,在這裏:

return callback(map); 

但是,你不及格回調xmlObjectRepositoryLoader

console.log(this.xmlObjectRepositoryLoader(filePath)); 

而是執行此操作:

this.xmlObjectRepositoryLoader(filePath, function(map){ 
    console.log(map) 
}); 
+0

謝謝。這工作作爲一種魅力! – Abhinav

2

因爲我沒有名聲發表評論。我正在回答這個問題。對不起。 ü在上述線之下錯過

this.objectLoader = function(filePath){ 
     if (filePath.includes(".xml")) { 
      console.log(this.xmlObjectRepositoryLoader(filePath)); 
    } 

this.xmlObjectRepositoryLoader(filePath)

在代碼中的參數。

和U可以包括在功能xmlObjectRepositoryLoader驗證檢查回調是否是一個函數或不然後調用它,以避免引發錯誤(如果它不是強制性參數)。

+0

感謝您關注此事 – Abhinav

相關問題