我有一个名为deploy
的任务,可以使用wwwroot
命令将文件复制到我的项目exec
文件夹中:
function deploy() {
exec('robocopy CSS wwwroot\CSS *.css', function (err, stdout, stderr) {
console.log(stdout);
console.log(stderr);
});
exec('robocopy CSS CSS *.css', function (err, stdout, stderr) {
console.log(stdout);
console.log(stderr);
}).;
exec('robocopy JS wwwroot\\JS *.map', function (err, stdout, stderr) {
console.log(stdout);
console.log(stderr);
});
// ...
}
这曾经可以工作,但是从Gulp 4.0开始,它给出了以下错误消息:Did you forget to signal async completion?
根据指南https://gulpjs.com/docs/en/getting-started/async-completion#signal-task-completion,所有推荐的解决方案似乎期望每个任务只有一个异步功能。
是否可以在同一任务中运行这些异步功能?
答案 0 :(得分:0)
我通过将exec
调用包装在Promise
中来解决了这个问题,
function multiExec(cmds) {
var promises = [];
for(var cmd of cmds) {
promises.push(new Promise((resolve, reject) => {
exec(cmd, (stdout, stderr, err) => {
if(err){
reject(err);
} else {
resolve();
});
});
});
}
return new Promise.all(promises);
}
然后按原样使用:
function deploy() {
return multiExec(['robocopy CSS wwwroot\CSS *.css'
'robocopy CSS CSS *.css',
'robocopy JS wwwroot\\JS *.map']);
}