gulp.task('foobar',function(callback) { ... });
我正在试图了解什么是回调函数。它在哪里定义?在运行时可以传递一些其他函数作为参数吗?它有什么作用?
These docs表示回调参数是orchestrator的提示,即该任务应该异步运行,其中执行回调表示异步任务已完成。
通过一些实验,它看起来像调用回调没有参数返回成功状态,并用一些字符串调用它会引发一个错误:
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)
所以,我有的问题是:
这是回调的唯一功能,如果通过参数引发异常并成功完成,否则执行其他操作?
>我可以用其他一些功能来覆盖它吗(这样做有什么理由)
也许我的文档阅读技巧让我失望(不会是第一次),但我似乎在api文档中找不到这些问题的答案。
感谢任何帮助。
解决方法
gulp.task('something',function(done) { ... });
在即将到来的文件中,使这一点更清晰。
你为什么需要回调?通常,在定义任务时返回流:
gulp.task('goodstuff',function() { return gulp.src('./app/**/*.*') .pipe(someotherstuff()) .pipe(gulp.dest('./dist'); });
通过返回流,任务系统能够计划这些流的执行。但有时,特别是当你在回调地狱或调用一些无流水插件时,你无法返回流。这就是回调。让任务系统知道您已经完成,并进入执行链中的下一个调用。
对你的问题:
Is this the only functionality of the callback,to raise an exception if passed an argument and to complete successfully otherwise?
不,唯一的功能是让任务系统知道你的任务已经完成。
Is there anything else that it does?
没有。
Could I override it with some other function (and would there be any sane reason to do so)?
不,不。
Is it possible to pass any other arguments to a gulp task function?