async readFile module.export in node.js

我很抱歉,什么可能很容易成为一个天真的问题,但我试图弄清楚节点是如何工作的,特别是对于这样的问题:

我需要做的是通过require和module.exports从fs.readFile发送一个对象/文件。 这是我试过的是这个

在一个文件中(称之为app.js)读取文件的代码:

var fs = require('fs'); var file_contents = undefined; var callback_reader = function(err, data) { if (err) return console.error(err); file_contents = data.toString().split('\n'); } module.exports = { parseFile: function(file_path) { fs.readFile(file_path.toString(), 'utf-8', callback_reader); } } 

和一些其他的文件,(称为main.js)我需要使用readFile读取的文件的内容像这样

 var file_importer = require('./app.js') file_importer.parseFile(real_path_to_file); 

但如果我尝试console.log这最后一行我总是得到未定义的对象。 现在我知道这是因为callback没有执行console.log之前,但我不确定如何实现这种沟通。

所以我改变了一下你的代码来使用callback。 看来你不能使用module.exports中asynchronous函数的“return”。 但是,下面的代码正常工作。 希望能帮助到你。

main.js

 var file_importer = require('./app.js') file_importer.parseFile('./time.js', function(err, data){ if(err) return console.log(err); console.log(data); }); 

app.js

 var fs = require('fs'); module.exports = { parseFile: function(file_path, callback) { fs.readFile(file_path.toString(), 'utf-8', function(err, data) { if (err) return callback(err); callback(null, data); }); } } // much shorter version exports.parseFile = function(file_path, callback) { fs.readFile(file_path.toString(), 'utf-8', callback); } 

这是JavaScript的工作,它不等待callback被称为返回。 你应该在你的callback中做你的console.log 。 像这些 :

 fs.readFile(pathToFile, 'utf-8', function(err, data) { if (err) return err; console.log(data); // Continue your process here })