如何从一个带有多个源文件的gulp任务一次返回所有的stream?

我写的一口气的任务打破了我的主要任务中的runSequence。 它必须在其他任务之间运行,如下所示:

runSequence( ... ':build:prod:staticIndex', ':build:prod:typeDocToMD', // << this is my task ':build:prod:staticDocumentation', ...etc 

而它之后的任务从未被执行。 这使我认为我的任务不会返回一个单一的stream或不正确。

这是我的任务看起来如何:

 gulp.task(':build:prod:typeDocToMD', (done: any) => { let taskNum: number = 0; let streams = []; let filesPath = [ path.join(__CONFIG.TMPL_DOCS_PATH, '**/*.md') ]; glob(filesPath.toString(), function (er, files) { taskNum = files.length - 1; files.forEach((filename) => { let stream = gulp.src(filename) .pipe(addTypedoc()) // << this is the custom plugin I wrote .pipe(gulp.dest(function (file) { return file.base; })); stream.on('end', () => { streams.push(stream); if (streams.length === taskNum) { gUtil.log('the end!'); return merge(streams); } }); }); }); }); 

所以我用glob从文件夹中recursion地获取所有的md文件。 我使用合并stream将所有stream合并在一起,并返回一个。

我得到了'结束!' 消息logging,但吞噬之后永远不会到达下一个任务。

我在这里错过了什么?

在此先感谢您的帮助!

好的,我只是find了一个解决scheme,这很简单:使用任务的callback参数是这样的:

 if (streams.length === taskNum) { gUtil.log('the end!'); done(); } 

现在它工作! 毕竟我甚至不需要使用合并stream。