【发布时间】:2020-02-15 20:34:57
【问题描述】:
我编写了一个脚本,它将异步执行多个 Angular CLI 命令(即ng build 或ng 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 本身记录到控制台之外,我还没有得到任何东西。
我唯一的想法是命令是在与当前控制台不同的上下文中执行的,因此不会记录输出,但我不知道如何解决这个问题。
【问题讨论】:
标签: javascript angular asynchronous promise