nodejs如何在其他文件中使用promise输出并修改它,然后返回它的值

我的代码如下所示:

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 

在这种情况下,如何使用promise来调用另一个promise函数,然后在另一个promise函数中使用返回的值,并将计算值返回给调用函数,以便在其他函数中使用该值。 我听起来有些困惑。 请帮忙

参考链接: Node.js:使用来自callback或asynchronous的值调用函数

以下是readObjectRepository的定义:

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

我在你的代码中遇到了这个问题。 readObjectRepository方法不会返回一个promise,事实上不会返回任何东西

所以你不能连锁

为此,在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 }