我正在为学校学习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。
答案 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
是一个异步函数。