使用Node.js中的参数调用下一步步骤模块
问题描述:
我刚开始使用Step,并试图获取目录中所有文件的stat
信息。使用Node.js中的参数调用下一步步骤模块
但是,由于我在第二步中打电话给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
的回调只是被调用一次,文件的数组。
答
你可以在getFiles(hacky)之外使用一个变量作用域,或者你也可以使用闭包。
个人而言,我会从步骤切换到异步(https://github.com/caolan/async)。 async中提供的瀑布方法是您真正需要的。异步具有与步骤等相同的功能。
答
fs.readdir(p, (function(err, files) {
this(err, files, directory);
}).bind(this));
this
仅仅是一个函数。你可以明确地调用它。
我结束了交换到异步。这是炸弹。 –
我完全不同意。外部范围变量不是一件坏事,但需要正确完成。范围查找非常昂贵;但通过创建一个局部变量的范围变量,真的没有问题。关于切换到异步:根据我的经验,使用Step可以比异步更优雅地表达某些内容。尽管如此,还不够完美,而一个将他们的想法和功能相结合的图书馆将会很好。最重要的事实是,尽管单线程环境可以使许多事情变得更容易,但我仍然不会总称它很容易。 –