无法从函数获取输出

我想弄清楚如何从xml文件获得价值,并输出该值到控制台。

 const path = require('path'); const fs = require('fs'); const parseString = require('xml2js').parseString; const sourceFile = path.join(__dirname, 'books.xml'); const document = (sourceFile, callback) => { fs.readFile(sourceFile, { encoding: 'utf-8' }, function (err, data) { if (err) { return err; } parseString(data, (err, result) => { result.catalog.book.forEach(users => { callback(users.email); }); }); }); }; console.log(document(sourceFile, data => data)); 

XML本身很简单:

 <catalog> <book id="bk101"> <author>Gambardella, Matthew</author> <title>XML Developer's Guide</title> <email>test@test.com</email> </book> </catalog> 

但是我从函数中得到的是undefined 。 为什么会发生?

更新:我试图发送返回值给nodemailer

 transporter.sendMail({ from: 'mail@mail.com', to: document(sourceFile, (data) => data), subject: 'Message', text: 'I hope this message gets sent!', }, (err, info) => { if (err) { console.log('error!'); console.log(err.message); } else { console.log('sucess!'); console.log(info.messageId); console.log(info.response); } 

但我得到一个错误:'缺less所需的标题'为'。'

您不打印数据的值,而是打印document函数的返回值(它不返回任何内容,因此undefined )。

我已经修改了代码,所以现在它会按照你的意愿工作,

 const path = require('path'); const fs = require('fs'); const parseString = require('xml2js').parseString; const sourceFile = path.join(__dirname, 'books.xml'); const document = (sourceFile, callback) => { fs.readFile(sourceFile, { encoding: 'utf-8' }, function (err, data) { if (err) { return err; } parseString(data, (err, result) => { result.catalog.book.forEach(users => { callback(users.email); }); }); }); }; document(sourceFile, data => console.log(data)); 

更新:根据OP的评论,

 const path = require('path'); const fs = require('fs'); const parseString = require('xml2js').parseString; const sourceFile = path.join(__dirname, 'books.xml'); const document = (sourceFile, callback) => { fs.readFile(sourceFile, { encoding: 'utf-8' }, function (err, data) { if (err) { return err; } parseString(data, (err, result) => { result.catalog.book.forEach(users => { callback(users.email); }); }); }); }; document(sourceFile, data => { transporter.sendMail({ from: 'mail@mail.com', to: data, subject: 'Message', text: 'I hope this message gets sent!', }, (err, info) => { if (err) { console.log('error!'); console.log(err.message); } else { console.log('sucess!'); console.log(info.messageId); console.log(info.response); } }); });