对不起,这可能很容易成为一个天真的问题,但我想弄清楚节点是如何工作的,特别是对于这样的问题:
我需要做的是通过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,我总是得到未定义的对象。现在我知道这是因为回调没有在console.log之前执行,但我不确定如何实现这种通信。
答案 0 :(得分:5)
所以我改变了你的代码以使用回调。 看来你不能在module.exports中使用asyncronous函数的“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);
}
答案 1 :(得分:1)
这是javascript工作,它不等待回调被调用返回。
您应该在回调中执行console.log
。
像这样:
fs.readFile(pathToFile, 'utf-8', function(err, data) {
if (err) return err;
console.log(data);
// Continue your process here
})