【问题标题】:Async readFile module.exports in node.jsnode.js 中的异步 readFile module.exports
【发布时间】:2015-08-19 09:03:57
【问题描述】:

很抱歉,这可能很容易成为一个幼稚的问题,但我正在尝试弄清楚节点是如何工作的,尤其是对于这样的问题:

我需要做的是通过 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 之前执行,但我不确定如何实现这种通信。

【问题讨论】:

  • 你没有从 callback_reader 返回文件内容,你需要 var file = file_importer.parse.... console.log(file)
  • 好的,如果我在 app.js 的 callback_reader 中使用 return file_contents 并像@molda 描述的那样在 main.js 中调用控制台日志,我仍然在日志中未定义。

标签: javascript node.js


【解决方案1】:

这是 javascript 工作,它不等待回调被调用返回。 你应该在你的回调中做你的console.log。 像这些:

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

【讨论】:

  • 它当然可以这样工作,但它在同一个文件中......我需要使用 modules.export 将读取的文件内容传递给其他函数。如果我使用文件阅读器的同步版本,我可以轻松做到这一点,但是......
【解决方案2】:

所以我稍微更改了您的代码以使用回调。 看来您不能使用 module.exports 中异步函数的“return”。但是,下面的代码按预期工作。希望对您有所帮助。

ma​​in.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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-16
    • 2012-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多