我想调用Node.js中的函数,获取结果,然后将它们发送到模板。 results
始终返回空。
怎么了?
var replace = req.params.replace || "";
var find = req.params.find;
var fs = require("fs");
var dir = "./public/sounds/";
var results = [];
var readFiles = function (root) {
fs.readdir(root, function (err, files) {
if (err) {
console.log(err);
return;
}
files.forEach(function (file) {
console.log(root.concat(file));
fs.stat(root.concat(file), function (err, stat) {
if (stat && stat.isDirectory()) {
readFiles(root.concat(file + "/"));
}
});
if (file.indexOf(find) > 0) {
var oldPath = root.concat(file);
var newPath = oldPath.replace(find, replace).trim();
console.log("Old Path: ", oldPath, " New Path: ", newPath);
fs.rename(oldPath, newPath);
results.push(newPath);
}
})
});
};
readFiles(dir);
res.jsonp({
message: results
});
答案 0 :(得分:0)
var results = [];
...some async stuff...
console.log(results);
每次都会打印空数组,所以如何修复。
简短回答:
var async = require('async');
async.each(files, function (file) { ... },
function (error, results) {
res.jsonp({
message: results
});
});
更长的答案,你的代码分支笨拙,所以它需要一些重组才能正常工作。
var async = require('async');
var replace = req.params.replace || "";
var find = req.params.find;
var fs = require("fs");
var dir = "./public/sounds/";
var readFiles = function (root, cb) {
var results = [];
fs.readdir(root, function (err, files) {
if (err) {
cb(err);
return;
}
aync.each(file, function (file, cb) {
console.log(root.concat(file));
fs.stat(root.concat(file), function (err, stat) {
if (err) {
return cb(err);
}
if (stat && stat.isDirectory()) {
readFiles(root.concat(file + "/"), function (err, res) {
results = results.concat(res);
cb(err);
});
} else {
if (file.indexOf(find) > 0) {
var oldPath = root.concat(file);
var newPath = oldPath.replace(find, replace).trim();
console.log("Old Path: ", oldPath, " New Path: ", newPath);
fs.rename(oldPath, newPath);
results.push(newPath);
}
cb();
}
});
}, function (err) {
cb(err, results);
});
});
};
readFiles(dir, function (err, results) {
res.jsonp({
message: results
});
});
我还没有测试过,所以如果您在调试时遇到问题请告诉我。