Выполнить несколько асинхронных действий в задании gulp? - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть задание gulp, которое называется 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, кажется, что все рекомендуемые решения ожидают только одну асинхронную функцию на задачу.

Есть ли способзапустить эти асинхронные функции в одной задаче?

1 Ответ

0 голосов
/ 08 декабря 2018

Я решил эту проблему, заключив вызовы 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']);
}
...