为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

POPMUISE 2021-11-25 19:17:21
我编写了一个脚本,它将异步执行多个 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命令的输出。有没有办法可以在这些命令运行时将它们的输出记录到控制台,或者您是否只能在承诺得到解决后才记录输出?除了将承诺本身记录到控制台之外,我还没有得到任何东西。我唯一的想法是命令是在与当前控制台不同的上下文中执行的,因此不会记录输出,但我不确定如何解决这个问题。
查看完整描述

1 回答

?
万千封印

TA贡献1891条经验 获得超3个赞

不要使用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 缓冲输出并通常在命令执行完成后返回它。


查看完整回答
反对 回复 2021-11-25
  • 1 回答
  • 0 关注
  • 260 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信