吞咽任务是否必须返回任何东西?
问题描述:
在显示吞咽用法的在线示例中,一些任务返回流,而另一些则不返回流。吞咽任务是否必须返回任何东西?
例如,如果没有回报:
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
开始的实际操作开始。显然,tsc
和scripts
都没有等待编译步骤完成。
当这些任务返回其流,输出看起来相当不同:
$ 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
这里的顺序是有意义的,并且报告的持续时间达到预期。
如果您有一个异步但不涉及流的吞吐任务会怎样?你可以调用'done()'函数还是返回一个promise? – Bill 2016-07-06 21:29:38
您可以定义任务,以便它接受回调函数作为最终参数,或者您可以返回承诺。看到这里:https://github.com/gulpjs/gulp/blob/v3.9.1/docs/API.md#gulptaskname--deps-fn – 2017-05-16 13:53:32