使用Node.js步骤模块中的参数调用下一步

时间:2011-09-11 03:12:35

标签: node.js

我刚刚开始使用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的回调只会被调用一次,带有一个文件数组。

3 个答案:

答案 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)

您可以随时使用Q-Oper8:

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

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