学习Nodejs,回调问题和fs.readFile

时间:2015-11-07 21:22:04

标签: javascript node.js asynchronous

我正在为学校学习Nodejs并遇到回调和fs.readFile()的轻微问题。不幸的是,我必须严格使用本机Nodejs模块进行此分配。

我正在尝试异步读取包含用户数据的纯文本文件。

这是我到目前为止所做的:

// node_modules/user/index.js
modules.exports = {
  all: function() {
    fs.readFile(users_file, function(err, data) {
      if (err) throw err;
      var users = {};
      var lines = (""+data).split("\n");
      for (var i = 0; i < lines.length; i++) {
        var col = 0;
        var csv = lines[i].split(",");
        var data = {
          id: csv[++col],
          firstName: csv[++col],
          lastName: csv[++col],
          emailAddress: csv[++col],
          phoneNumber: csv[++col]
        };
        users[""+i] = new User(data);
      }
      console.log(users);
      return users;
    });
  }
}

console.log(用户)的输出;是正确的,但这总是返回undefined。

1 个答案:

答案 0 :(得分:1)

您似乎试图从users函数的回调中返回一些readFile变量,这些变量没有任何意义。您可能希望将一些回调传递给它,这将在读取文件时调用:

modules.exports = {
    all: function(done) {
        fs.readFile(users_file, function(err, data) {
            if (err) done(err, null);
            ...
            done(null, users);
        });
    }
};

现在当你调用这个all函数时,你不会期望它有任何返回值,但你宁愿传递一个回调函数来访问结果。就像那样:

xxxx.all(function(err, users) {
    if (err) throw err;
    // TODO: do something with the users parameter here.
});

而不是写作:

var users = xxxx.all();

这将永远不会起作用,因为all是一个异步函数。