Javascript 如何使用子进程承诺

Javascript 如何使用子进程承诺,javascript,node.js,child-process,spawn,Javascript,Node.js,Child Process,Spawn,我想要的是在stdout中命令生成的输出之后添加一些处理。最后,我想创建一个函数,如下所示: var promise = require('child-process-promise').spawn; promise('some_command_producing_output') .then(function (result) { ... }) .catch(function (err) { ... }); 函数应该使用子进程

我想要的是在stdout中命令生成的输出之后添加一些处理。最后,我想创建一个函数,如下所示:

var promise = require('child-process-promise').spawn;

promise('some_command_producing_output')
    .then(function (result) {
        ...
    })
    .catch(function (err) {
        ...
    });
函数应该使用子进程promise中的promise,等待生成成功的结果并返回处理数据的promise。

您可以通过

RunCommandAndProcess('some_command_producing_output')
    .then(function (result) {
        ...
    })
    .catch(function (err) {
        ...
    });

有关更多信息,请查看

欢迎来到Stack Overflow@ScHoolboy

我建议您使用Node.js中的一个基本子流程模块,并通过以下方式自己承诺

var spawn = require('child-process-promise').spawn;
 
var promise = spawn('echo', ['hello']);
 
var childProcess = promise.childProcess;
 
console.log('[spawn] childProcess.pid: ', childProcess.pid);
childProcess.stdout.on('data', function (data) {
    console.log('[spawn] stdout: ', data.toString());
});
childProcess.stderr.on('data', function (data) {
    console.log('[spawn] stderr: ', data.toString());
});
 
promise.then(function () {
        console.log('[spawn] done!');
    })
    .catch(function (err) {
        console.error('[spawn] ERROR: ', err);
    });
其中:

  • cmd-命令,例如“echo”
  • args:参数数组,例如[“Hello world”]
如果需要,可以调用函数runcommandprocess:)

用法示例:

const spawn = require('child_process').spawn;

const spawnPromise = (cmd, args) => {
  return new Promise((resolve, reject) => {
    try {
      const runCommand = spawn(cmd, args);
      runCommand.stdout.on('data', data => resolve(data.toString()));
      runCommand.on('error', err => {
        throw new Error(err.message);
      });
    } catch (e) {
      reject(e);
    }
  });
};

spawnPromise('ls', ['-la']).then(data => console.log('data: ', data));
const result = await spawnPromise('ls', ['-la']);