即使进程以代码 0 终止,Gulp 任务也不会完成

Sri*_*hti 7 javascript gulp visual-studio-2015

我添加了一个 gulp 任务来删除给定路径中的目录。从数组中读取路径。我的 gulp 任务运行正常并完成所需的工作。Task Runner 资源管理器提供启动任务的消息以及进程成功终止的信息,代码为 0。问题在于它没有说明任务已完成。因此,我依赖于此任务的其他任务无法在构建过程自动化期间执行。

const rmr = require('rmr');

// array containing the list of all paths of the folders to be deleted
const removeFoldersArr = [ 
    {
        Path: "wwww/scripts"
    },
    {
        Path: "www/styles"
    }
];

// Gulp Task to remove all files in a folder
gulp.task('cleanFolders', function () {
    return removeFoldersArr.map(function (folder) {
        rmr.sync(folder.Path);
    });
});
Run Code Online (Sandbox Code Playgroud)

在 Task Runner Explorer 中,任务开始但没有完成,虽然它以代码 0 终止,如下所示:

cmd.exe /c gulp -b "D:\My Projects\Solution1" --color --gulpfile "D:\My Projects\Solution1\Gulpfile.js" cleanFolders
[18:04:23] Using gulpfile D:\My Projects\Solution1\Gulpfile.js
[18:04:23] Starting 'cleanFolders'...
Process terminated with code 0.
Run Code Online (Sandbox Code Playgroud)

Sri*_*hti 5

正确的方法是返回一个promise

给定一个可迭代对象(数组或字符串)或一个可迭代对象的承诺,promise.all 将可迭代对象中的所有值迭代到一个数组中,并返回一个承诺,当数组中的所有项目(是) 实现。

以下是解决方案的代码片段:

gulp.task('cleanFolders', function () {
    return Promise.all([
        removeFoldersArr.map(function (folder) {
            rmr.sync(folder.Path);
        })
    ]);
});
Run Code Online (Sandbox Code Playgroud)

现在,该过程首先完成然后终止。

以下是Task Runner Explorer 中显示的输出:

cmd.exe /c gulp -b "D:\My Projects\Solution1" --color --gulpfile "D:\My Projects\Solution1\Gulpfile.js" cleanFolders
[12:25:01] Using gulpfile D:\My Projects\Solution1\Gulpfile.js
[12:45:01] Starting 'cleanFolders'...
[12:45:01] Finished 'cleanFolders' after 3.18 ms
Process terminated with code 0.
Run Code Online (Sandbox Code Playgroud)