2016-09-13 2 views
1

У меня есть код в одном из моего файла, как показано ниже:nodejs как использовать выход посыла в другой файл и изменить его, а затем вернуть его значение

this.xmlObjectRepositoryLoader = function (xmlPath){ 
     var innerMap = {}; 
     var elementName; 
     var filePath = xmlPath+'.xml' 
     var self = this 
     return new Promise(
      function(resolve, reject){ 
       console.log("In xmlObjectRepositoryLoader : "+filePath) 
       self.readFilePromisified(filePath) 
       .then(text => { 
        var doc = domparser.parseFromString(text,"text/xml"); 
        var elements = doc.getElementsByTagName("Element"); 
        for(var i =0 ; i< elements.length;i++){ 
         var elm = elements[i]; 
         elementName = elm.getAttribute("name"); 
         var params = elm.getElementsByTagName("param"); 
         innerMap = {}; 
         for(var j =0 ; j< params.length;j++){ 
          var param = params[j]; 
          var locatorType = param.getAttribute("type"); 
          var locatorValue = param.getAttribute("value"); 
          innerMap[locatorType] = locatorValue; 
         } 
         map[elementName] = innerMap; 
         innerMap={}; 
        } 
        console.log(map) // prints the map 
        resolve(text) 
       }) 
       .catch(error => { 
        reject(error) 
       }); 
      }); 
     } 

this.readFilePromisified = function(filename) { 
     console.log("In readFilePromisified : "+filename) 
     return new Promise(
      function (resolve, reject) { 
       fs.readFile(filename, { encoding: 'utf8' }, 
       (error, data) => { 
        if (error) { 
         reject(error); 
        } else { 
         resolve(data); 
        } 
       }) 
      }) 
     } 

Я звоню выше функции из другого файла, как показано ниже:

objectRepositoryLoader.readObjectRepository(fileName) 
    .then(text => { 
     console.log(text); 
    }) 
    .catch(error => { 
     console.log(error); 
    }); 

Но это дает мне ошибку как

.then(text => { ^

TypeError: Cannot read property 'then' of undefined 

в этом случае, как я могу использовать обещание позвонить другому обещание functi а затем использовать возвращаемое значение в еще одной функции обещания и вернуть вычисленное значение вызывающей функции, где я могу использовать значение в других функциях. Я немного смущен. Пожалуйста, помогите

Referrence ссылка: Node.js : Call function using value from callback or async

Ниже readObjectRepository определение:

readObjectRepository = function(fileName) { 
     var filePath = '../'+fileName; 
     xmlObjectRepositoryLoader(filePath)   
    } 
+0

Какое определение метода - readObjectRepository? – AdityaReddy

+0

Он возвращает HashMap. Мне нужно разобрать хэш-карту и извлечь значение. – Abhinav

+0

Можете ли вы предоставить метод Определение readObjectRepository. Это поможет понять вашу ошибку. – AdityaReddy

ответ

3

Я получил этот вопрос в вашем коде. Метод readObjectRepository не возвращает обещание и Infact не возвращает ничего

Таким образом, вы можете не цепь .then

Чтобы сделать что- в определении функции от readObjectRepository возвращения обещание xmlObjectRepositoryLoader

Сделать это изменение и все должно быть хорошо

readObjectRepository = function(fileName) { 
     var filePath = '../'+fileName; 
     return xmlObjectRepositoryLoader(filePath) //This will return the promise of xmlObjectRepositoryLoader which you can handle in 'then' and obtain the text 
    } 
+0

Работали как шарм. Могу ли я получить еще один запрос? – Abhinav

+0

Уверенный .. Пожалуйста, продолжайте – AdityaReddy

+0

@Abhinav Если ответ был полезным, пожалуйста, примите/повысьте. – strah

Смежные вопросы