Use this function in a serial synchronous loop.
function eachSeries(array, fn) { return new Promise(function (resolveGlobal, rejectGlobal) { var promises = [] var next = 0 fn(array[next], resolveObj, rejectObj) function resolveObj(data) { promises.push( Promise.resolve(data) ) next++ if (next >= array.length) { Promise.all(promises).then(function (data) { resolveGlobal(data) }).catch(function (error) { rejectGlobal(error) }) } else { fn(array[next], resolveObj, rejectObj) } } function rejectObj(error) { return rejectGlobal(error) } }) }
And you use this function like this ...
var process = require('child_process'); function execCommand(req,res,callback){ var params = req.params.list //list is an array in the request var result = [] eachSeries(params, function (param, resolve, reject) { cmd = process.exec(param) cmd.stdout.on('data', function (data){ //... after long time you get data, then result.push(data.toObject()) resolve() }) cmd.on("error", function (error){ reject(error) //If something bad happend }) }) .then(function () { console.log("All process executed one by one and pushed...") res.send(result) }) .catch(function (error) { console.log("SOmething broke", error) res.send(error) }) }
or if you prefer
var process = require('child_process'); function execCommand(req,res,callback){ var params = req.params.list //list is an array in the request eachSeries(params, function (param, resolve, reject) { cmd = process.exec(param) cmd.stdout.on('data', function (data){ //... after long time you get data, then resolve(data.toObject()) }) cmd.on("error", function (error){ reject(error) //If something bad happend }) }) .then(function (alldata) { res.send(alldata) }) .catch(function (error) { res.send(error) }) }
Fernando carvajal
source share