在执行 Promise 时将函数的进度输出到控制台

我编写了一个脚本,它将异步执行多个 Angular CLI 命令(即ng build或ng test)。这样做的目的是让我们可以同时在不同的角度项目上执行这些功能。


这有效,但不是这些命令的输出的部分不会记录到控制台。


这基本上就是我正在做的事情(这段代码由 NodeJS 执行):


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


async function execute(cmd) {

  return new Promise(function(resolve, reject) {

    exec(cmd, (err, stdout, stderr) => {

      if (err) {

        reject(err);

      } else {

        resolve({ stdout, stderr });

      }

    });

  });

}


function executeCommandAsync(cmd) {

  const projects = ['proj1', 'proj2']; // arbitrary list, we get it in a different way


  projects.forEach(project => {

    console.log(`Executing command '${cmd}' on project ${project}...`);


    execute(`${cmd} ${project}`)

      .then(() =>

        console.log(

          `Successfully executed command '${cmd}' on project '${project}'!`

        )

      )

      .catch(err => {

        console.log(

          `Error occurred executing '${cmd}' command on project '${project}'`

        );

        console.log(`${err}`);

      });

  });

}

所以在上面的例子中,我可以传入一个命令来在所有项目上执行,即'ng build'。控制台中的结果是这样的:


Executing command 'ng build' on project 'proj1'...

Executing command 'ng build' on project 'proj2'...

Successfully executed command 'ng build' on project 'proj1'!

Successfully executed command 'ng build' on project 'proj2'!

这里缺少的是ng build命令的输出。有没有办法可以在这些命令运行时将它们的输出记录到控制台,或者您是否只能在承诺得到解决后才记录输出?除了将承诺本身记录到控制台之外,我还没有得到任何东西。


我唯一的想法是命令是在与当前控制台不同的上下文中执行的,因此不会记录输出,但我不确定如何解决这个问题。


POPMUISE
浏览 261回答 1
1回答

万千封印

不要使用exec. 使用spawnwhich 是一个EventEmmiter对象。然后您可以在stdout/ stderrevents( spawn.stdout.on('data',callback..))发生时收听它们。来自 NodeJS 文档:var spawn = require('child_process').spawn,    ls    = spawn('ls', ['-lh', '/usr']);ls.stdout.on('data', function (data) {  console.log('stdout: ' + data.toString());});ls.stderr.on('data', function (data) {  console.log('stderr: ' + data.toString());});ls.on('exit', function (code) {  console.log('child process exited with code ' + code.toString());});exec 缓冲输出并通常在命令执行完成后返回它。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript