使用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。 你可以明确地调用它。

你总是可以使用Q-Oper8:

https://github.com/robtweed/Q-Oper8

然后,你可以安全地使用同步fs方法,这可能使你更容易做你想做的事情。