我刚刚开始使用Step,我正在尝试获取目录中所有文件的stat
信息。
然而,当我在第二步调用fs.stat
时,我仍然需要完整的路径。我怎样才能将它传递给下一个方法?我已经尝试了this(directory)
,但它没有按照我的预期发挥作用。
var getFiles = step.fn(
function readDir(directory) {
var p = path.join(__dirname, directory);
fs.readdir(p, this); // *** How do I pass 'directory' to the next method?
},
function readFiles(err, results, directory) {
if (err) throw err;
// Create a new group
var group = this.group();
results.forEach(function (filename) {
console.log(filename);
var p = path.join(__dirname, directory, filename);
// fs.stat requires a full path
fs.stat(p, group()); // Could be this.parallel() ??
});
}
);
// later...
var files = getFiles('data');
据我了解,readDir
被调用一次,然后readFiles
被调用,但所有串联的fs.readdir
的回调只会被调用一次,带有一个文件数组。
答案 0 :(得分:1)
您可以在getFiles(hacky)外部使用变量作用域,或者也可以使用闭包。
就个人而言,我会从步骤切换到异步(https://github.com/caolan/async)。异步中提供的瀑布方法就是你真正想要的。 Async具有与步骤相同的功能。
答案 1 :(得分:1)
fs.readdir(p, (function(err, files) {
this(err, files, directory);
}).bind(this));
this
只是一个功能。你可以明确地调用它。
答案 2 :(得分:0)