gulp:gulp任务callback函数在哪里定义?

吞噬任务可以这样定义:

gulp.task('foobar', function(callback) { ... }); 

我试图了解callback函数是什么。 它在哪里定义? 我可以在运行时将其他函数作为parameter passing吗? 它有什么作用?

这些文档指出,callback参数是Orchestrator提示任务应该asynchronous运行的地方,执行callback表明asynchronous任务已经完成。

通过一些实验,它看起来像调用callback没有参数返回一个成功的状态,并调用一些string抛出一个错误:

 gulp.task('foobar', function(callback) { callback(); }); gulp.task('bazkad', function(callback) { callback("some string"); }); 

(抛开:如何在StackOverflow markdown中的代码块之间放置一个中断?)

 $ gulp foobar [09:59:54] Using gulpfile ~\repos\gulpproj\gulpfile.js [09:59:54] Starting 'foobar'... [09:59:54] Finished 'foobar' after 56 μs $ gulp bazkad [10:05:49] Using gulpfile ~\repos\gulpproj\gulpfile.js [10:05:49] Starting 'bazkad'... [10:05:49] 'bazkad' errored after 55 μs [10:05:49] Error: some string at formatError (~\AppData\Roaming\npm\node_modules\gulp\bin\gulp.js:169:10) at Gulp.<anonymous> (~\AppData\Roaming\npm\node_modules\gulp\bin\gulp.js:195:15) at Gulp.emit (events.js:107:17) at Gulp.Orchestrator._emitTaskDone (~\repos\gulpproj\node_modules\gulp\node_modules\orchestrator\index.js:264:8) at ~\repos\gulpproj\node_modules\gulp\node_modules\orchestrator\index.js:275:23 at finish (~\repos\gulpproj\node_modules\gulp\node_modules\orchestrator\lib\runTask.js:21:8) at cb (~\repos\gulpproj\node_modules\gulp\node_modules\orchestrator\lib\runTask.js:29:3) at Gulp.<anonymous> (~\repos\gulpproj\gulpfile.js:35:5) at module.exports (~\repos\gulpproj\node_modules\gulp\node_modules\orchestrator\lib\runTask.js:34:7) at Gulp.Orchestrator._runTask (~\repos\gulpproj\node_modules\gulp\node_modules\orchestrator\index.js:273:3) 

所以,我有的问题是:

  • 这是callback的唯一function,如果传递参数引发exception,否则成功完成,或者执行其他操作?
  • 我可以用其他函数覆盖它吗(并且会有任何理智的理由)?

也许我的文档阅读技能是失败的(不会是第一次),但我似乎无法在API文档中find这些问题的答案。

谢谢你的帮助。

callback函数来自Orchestrator(或者新的一个 – 承担者 – 在Gulp 4中),实际上只不过是一个调用来告诉任务系统你的任务已经完成了。 这就是为什么他们改变了

 gulp.task('something', function(done) { ... }); 

在即将到来的文档中,使这一点更清晰。

为什么你需要callback? 通常,您在定义任务时返回一个stream:

 gulp.task('goodstuff', function() { return gulp.src('./app/**/*.*') .pipe(someotherstuff()) .pipe(gulp.dest('./dist'); }); 

通过返回stream,任务系统能够规划这些stream的执行。 但有时候,特别是当你在callback地狱或者调用一些无stream的插件时,你不能返回一个stream。 这就是callback的目的。 让任务系统知道你已经完成,然后继续执行下一个调用链。

对你的问题:

这是callback的唯一function,如果传递参数引发exception,否则成功完成。

不,唯一的function是让任务系统知道你的任务已经完成。

还有什么呢?

没有。

我可以用其他函数覆盖它吗(并且会有任何理智的理由)?

没有,也没有

是否有可能将任何其他parameter passing给吞噬任务函数?

不,但你为什么? 你的服务上有一个JS文件的完整范围,只是把你的论点放在某个地方。