如何使用node.js执行多个shell命令?

nac*_*cab 3 node.js

也许我还没有弄乱异步范例,但我想做这样的事情:

var exec, start;
exec = require('child_process').exec;
start = function() {
  return exec("wc -l file1 | cut -f1 -d' '", function(error, f1_length) {
    return exec("wc -l file2 | cut -f1 -d' '", function(error, f2_length) {
      return exec("wc -l file3 | cut -f1 -d' '", function(error, f3_length) {
        return do_something_with(f1_length, f2_length, f3_length);
      });
    });
  });
};
Run Code Online (Sandbox Code Playgroud)

每次我想添加一个新的shell命令时,保持嵌套这些回调似乎有点奇怪.有没有更好的方法呢?

fre*_*ish 7

正如哈维所说,你可以使用TwoStep.另一方面,我使用Async JS库.您的代码可能如下所示:

async.parallel([
    function(callback) {
        exec("wc -l file1 | cut -f1 -d' '", function(error, f1_length) {
            if (error)
                return callback(error);
            callback(null, f1_length);
        });
    },
    function(callback) {
        exec("wc -l file2 | cut -f1 -d' '", function(error, f2_length) {
            if (error)
                return callback(error);
            callback(null, f2_length);
        });
    },
    function(callback) {
        exec("wc -l file3 | cut -f1 -d' '", callback);
    }
],
function(error, results) {
    /* If there is no error, then
       results is an array [f1_length, f2_length, f3_length] */
    if (error)
        return console.log(error);
    do_something_with(results);
});
Run Code Online (Sandbox Code Playgroud)

Async提供了大量其他选择.阅读文档并试一试!请注意,f3_length我刚刚callback在通话时使用过exec.您也可以使用其他调用(因此您的代码会更短).我只想告诉你它是如何工作的.