使用Node.js Step模块中的参数调用下一步
我刚刚开始使用步骤,我试图获取目录中的所有文件的stat
信息。
但是,因为我在fs.stat
调用fs.stat
,我仍然需要完整的path。 我怎样才能把它传递给下一个方法? 我试过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
的callback只是调用一次,一个文件的数组。
你可以在getFiles(hacky)之外使用一个variables作用域,或者你也可以使用闭包。
就个人而言,我会从步骤切换到asynchronous(https://github.com/caolan/async)。 在asynchronous中提供的瀑布方法是你真正想要的。 asynchronous具有与步骤相同的function。
fs.readdir(p, (function(err, files) { this(err, files, directory); }).bind(this));
this
只是一个function。 你可以明确地调用它。