Use this function for a in serie synchronous for 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 that 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)
})
}