将函数的进度输出到执行 Promise 内部的控制台 [重复]

Posted

技术标签:

【中文标题】将函数的进度输出到执行 Promise 内部的控制台 [重复]【英文标题】:Output progress of function to console inside of executing Promise [duplicate] 【发布时间】:2020-02-15 20:34:57 【问题描述】:

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

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

这就是我正在做的事情(这段代码由 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 命令的输出。有没有一种方法可以在这些命令运行时将输出记录到控制台,还是只能在承诺解决后才记录输出?除了将 Promise 本身记录到控制台之外,我还没有得到任何东西。

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

【问题讨论】:

【参考方案1】:

由于我无法发表评论,因此我将其留在这里:查看此答案https://***.com/a/10232330/4662777

【讨论】:

以上是关于将函数的进度输出到执行 Promise 内部的控制台 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

nodejs promise深度解析

promise内部实现

js中的Promise简单总结(ES6)

Promise知识点总结

简谈promise封装

promise使用