【发布时间】:2015-01-16 21:22:54
【问题描述】:
所以现在我正在尝试使用 Nodejs 访问文件,以便将它们写入服务器并进行处理。
我把它分成以下几个步骤:
- 遍历目录生成所有文件路径的数组
- 将每个文件路径中的原始文本数据放入另一个数组中
- 处理原始数据
前两个步骤运行良好,使用这些函数:
var walk = function(dir, done) {
var results = [];
fs.readdir(dir, function(err, list) {
if (err) return done(err);
var pending = list.length;
if (!pending) return done(null, results);
list.forEach(function(file) {
file = path.resolve(dir, file);
fs.stat(file, function(err, stat) {
if (stat && stat.isDirectory()) {
walk(file, function(err, res) {
results = results.concat(res);
if (!--pending) done(null, results);
});
} else {
results.push(file);
if (!--pending) done(null, results);
}
});
});
});
};
function processfilepaths(callback) {
// reading each file
for (var k in filepaths) { if (arrayHasOwnIndex(filepaths, k)) {
fs.readFile(filepaths[k], function (err, data) {
if (err) throw err;
rawdata[k] = data.toString().split(/ *[\t\r\n\v\f]+/g);
for (var j in rawdata[k]) { if (arrayHasOwnIndex(rawdata[k], j)) {
rawdata[k][j] = rawdata[k][j].split(/: *|: +/);
}}
});
}}
if (callback) callback();
}
显然,我想在加载完所有数据后调用函数processrawdata()。但是,使用回调似乎不起作用。
walk(rootdirectory, function(err, results) {
if (err) throw err;
filepaths = results.slice();
processfilepaths(processrawdata);
});
这永远不会导致错误。除了processrawdata() 总是在processfilepaths() 之前完成之外,一切似乎都运行得很完美。我做错了什么?
【问题讨论】:
-
现在你必须考虑使用 Promise 来获得更好的控制流。
标签: javascript node.js asynchronous callback synchronous