吞咽任务是否必须返回任何东西?

问题描述:

在显示吞咽用法的在线示例中,一些任务返回流,而另一些则不返回流。吞咽任务是否必须返回任何东西?

例如,如果没有回报:

gulp.task('tsc', function() 
{ 
    gulp.src('**/*.ts') 
     // ... 
}); 

而且相同的代码,有回报:

gulp.task('tsc', function() 
{ 
    return gulp.src('**/*.ts') 
     // ... 
}); 

是否有必要返回流?

如果您没有返回流,那么每个任务的异步结果将不会由其调用者等待,也不会被任何相关任务等待。

例如,不返回时流:这里

$ gulp scripts 
[21:25:05] Using gulpfile ~/my-project/gulpfile.js 
[21:25:05] Starting 'tsc'... 
[21:25:05] Finished 'tsc' after 13 ms 
[21:25:05] Starting 'scripts'... 
[21:25:05] Finished 'scripts' after 10 ms 
[21:25:05] Compiling TypeScript files using tsc version 1.0.1.0 

注意,scripts任务取决于tsc任务。它报告tsc在13毫秒内完成,这绝对是太快而不能合理地相信。然后scripts任务似乎在非常短的时间内开始并完成。最后,由tsc开始的实际操作开始。显然,tscscripts都没有等待编译步骤完成。

当这些任务返回其流,输出看起来相当不同:

$ gulp scripts 
[21:42:25] Using gulpfile ~/my-project/gulpfile.js 
[21:42:25] Starting 'tsc'... 
[21:42:25] Compiling TypeScript files using tsc version 1.0.1.0 
[21:42:32] Finished 'tsc' after 6.65 s 
[21:42:32] Starting 'scripts'... 
[21:42:32] Finished 'scripts' after 204 ms 

这里的顺序是有意义的,并且报告的持续时间达到预期。

+7

如果您有一个异步但不涉及流的吞吐任务会怎样?你可以调用'done()'函数还是返回一个promise? – Bill 2016-07-06 21:29:38

+1

您可以定义任务,以便它接受回调函数作为最终参数,或者您可以返回承诺。看到这里:https://github.com/gulpjs/gulp/blob/v3.9.1/docs/API.md#gulptaskname--deps-fn – 2017-05-16 13:53:32