Я пытаюсь использовать дочерний процесс Node.js.Приведенный ниже код будет выполнять определенные команды оболочки и считывать данные как прослушиватель буферных потоков, предоставляемый процессом spawn.Модуль обещания узла Bluebird используется, чтобы обернуть дочерний процесс.
var execSpawn = require('child_process').spawn;
var Promise = require('bluebird');
spawnAction = function(path, cmd, cb){
return function(resolve, reject){
cmdExec = execSpawn(path, cmd);
var fileData = {}
var count = 0;
cmdExec.stdout.on('data', function(data){
if(cb){
fileData = data.toString('utf8');
}else{
if(data =='.'){
count +=1;
}else{
console.log(data.toString('utf8'));
}
}
});
cmdExec.stderr.on('data', function(data){
if(reject){
reject("error in scrubbing "+cmd.slice(-1) + " "+data.toString('utf8'));
}
});
cmdExec.on('exit', function(){
console.log("reach the exit event");
})
cmdExec.on('close', function(){
if(cb){
resolve(cb(fileData));
}else{
resolve(count);
}
});
}
}
Вышеупомянутый метод вызывается несколько раз для параллельного выполнения, используя следующие способы:
promises = []
cp = new Promise(spawnAction(Path, ['cmd'],parsingMethodHandler));
cp.then(function(data){
data.forEach(function(disk){
var handler = new Promise(self.spawnAction(Path, "next command"));
promises.push(handler);
}
}.then(function(){
Promise.all(promises).then(function(result){
//certain actions
}.catch(function(err){
//catch error specific to the failure of promise handler
})
}).catch(function(err){
//error specific to the first promise
})
И моя проблема заключается в том, если в случае какой-либо ошибки во времявыполнение любого обещания должно достигнуть "cmdExec.stderr.on" и выполнить отклонение обещания.Даже после того, как из-за ошибки я получаю консольные журналы, помещенные в потоки cmdExec.stdout.on, я не мог прекратить получать потоки буфера.
Я хотел бы знать, есть ли какой-либо конкретный способ остановить выполнение дочернего процесса, если он сталкивается с какой-либо ошибкой и останавливается, выбрасывая ошибку вместо продолжения получения потоков.
Заранее спасибоза любые предложения или идеи.