How to execute multiple shell commands using node.js?
Problem
Maybe I haven't groked the asynchronous paradigm yet, but I want to do something like this:
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);
});
});
});
};
It seems a little weird to keep nesting those callbacks every time I want to add a new shell command. Isn't there a better way to do it?
Problem courtesy of: nachocab
Solution
I personally use TwoStep in these situations:
var TwoStep = require("two-step");
var exec, start;
exec = require('child_process').exec;
start = function() {
TwoStep(
function() {
exec("wc -l file1 | cut -f1 -d' '", this.val("f1_length"));
exec("wc -l file2 | cut -f1 -d' '", this.val("f2_length"));
exec("wc -l file3 | cut -f1 -d' '", this.val("f3_length"));
},
function(err, f1_length, f2_length, f3_length) {
do_something_with(f1_length, f2_length, f3_length);
}
);
};
That said, there are a ton of flow controll libraries out there. I encourage you to try some out: https://github.com/joyent/node/wiki/Modules#wiki-async-flow
Solution courtesy of: Xavi
Discussion
View additional discussion.