如何使用子进程承诺

3 javascript spawn child-process node.js

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

promise('some_command_producing_output')
    .then(function (result) {
        ...
    })
    .catch(function (err) {
        ...
    });
Run Code Online (Sandbox Code Playgroud)

我想要的是在命令在标准输出中生成输出后添加一些处理。所以最后我想创建一个像这样使用的函数:

RunCommandAndProcess('some_command_producing_output')
    .then(function (result) {
        ...
    })
    .catch(function (err) {
        ...
    });
Run Code Online (Sandbox Code Playgroud)

该函数应该使用子进程承诺中的承诺,等待产生成功结果并返回处理数据的承诺。

Cyb*_*nal 6

欢迎来到 Stack Overflow @ScHoolboy。

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

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);
    }
  });
};
Run Code Online (Sandbox Code Playgroud)

在哪里:

  • cmd - 命令,例如“echo”
  • args:参数数组,例如 ["Hello world"]

如果需要,您可以将该函数调用为 RunCommandAndProcess :)

使用示例:

spawnPromise('ls', ['-la']).then(data => console.log('data: ', data));
Run Code Online (Sandbox Code Playgroud)

或者

const result = await spawnPromise('ls', ['-la']);
Run Code Online (Sandbox Code Playgroud)

  • 真的很有帮助。谢谢! (2认同)