Gulp - 带循环的异步完成
Gulp - Async Completion with a Loop
我正在处理一个 Gulp 文件。在这个文件中,我有两个函数执行两个独立的任务。使用以下内容调用这些函数:
gulp.task('build', gulp.parallel(buildJs, buildCss));
当执行 build
任务时,我收到以下错误:
以下任务未完成:default、build、buildCss
您是否忘记发出异步完成信号?
我的buildCss
函数是这样定义的:
const files= [
{ input:'core.scss', output:'core.css' },
{ input:'theme.scss', output:'theme.css' },
{ input:'controls.scss', output:'controls.css'}
];
function buildCss() {
files.forEach(function(f) {
return gulp.src(`./scss/${f.input}`)
.pipe(sass())
.pipe(concat(f.output))
.pipe(gulp.dest('./'))
;
});
}
我怀疑循环的每次迭代都在旋转它自己的线程。所以,Gulp 永远不知道 buildCss
什么时候结束。这意味着,不知何故,我需要知道何时生成所有 .css 文件并调用一些东西。如果我的理解是正确的,我不确定如何做最后一块。
如何解决 Gulp 中循环中项目的异步完成?
谢谢!
您可以使用 .on('end')
并为每个任务创建一个 Promise,然后检查所有的 Promise 是否正常,像这样应该可以工作:
function buildCss() {
return Promise.all(files.map(task => {
return new Promise((resolve,reject) => {
return gulp.src(`./scss/${task.input}`)
.pipe(sass())
.pipe(concat(task.output))
.pipe(gulp.dest('./'))
.on('end', () => resolve())
;
});
}));
}
我正在处理一个 Gulp 文件。在这个文件中,我有两个函数执行两个独立的任务。使用以下内容调用这些函数:
gulp.task('build', gulp.parallel(buildJs, buildCss));
当执行 build
任务时,我收到以下错误:
以下任务未完成:default、build、buildCss 您是否忘记发出异步完成信号?
我的buildCss
函数是这样定义的:
const files= [
{ input:'core.scss', output:'core.css' },
{ input:'theme.scss', output:'theme.css' },
{ input:'controls.scss', output:'controls.css'}
];
function buildCss() {
files.forEach(function(f) {
return gulp.src(`./scss/${f.input}`)
.pipe(sass())
.pipe(concat(f.output))
.pipe(gulp.dest('./'))
;
});
}
我怀疑循环的每次迭代都在旋转它自己的线程。所以,Gulp 永远不知道 buildCss
什么时候结束。这意味着,不知何故,我需要知道何时生成所有 .css 文件并调用一些东西。如果我的理解是正确的,我不确定如何做最后一块。
如何解决 Gulp 中循环中项目的异步完成?
谢谢!
您可以使用 .on('end')
并为每个任务创建一个 Promise,然后检查所有的 Promise 是否正常,像这样应该可以工作:
function buildCss() {
return Promise.all(files.map(task => {
return new Promise((resolve,reject) => {
return gulp.src(`./scss/${task.input}`)
.pipe(sass())
.pipe(concat(task.output))
.pipe(gulp.dest('./'))
.on('end', () => resolve())
;
});
}));
}