node.js – gulp:gulp任务回调函数在哪里定义?

gulp中的任务可以这样定义:

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文档中找不到这些问题的答案。

感谢任何帮助。

解决方法

回调函数来自orchestrator(或Gulp 4中的新的承诺程序),实际上只是一个通知任务系统您的任务“完成”的呼叫。这就是为什么他们改变了

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?

不,但你为什么呢?您的服务中有一个JS文件的全部范围,只需将您的参数放在某个地方。

相关文章

这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关...