gulp:gulp任务回调函数在哪里定义的?

2024-01-28

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

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

我想了解回调函数是什么。它在哪里定义的?我可以在运行时传入其他函数作为参数吗?它有什么作用?

这些文档 https://github.com/gulpjs/gulp/blob/master/docs/API.md#accept-a-callback指示回调参数是向 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');
});

通过返回流,任务系统能够计划这些流的执行。但有时,特别是当您处于回调地狱或调用某些无流插件时,您无法返回流。这就是回调的用途。让任务系统知道您已完成并继续执行链中的下一个调用。

对于您的问题:

这是回调的唯一功能吗?如果传递参数则引发异常,否则成功完成?

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

它还有其他作用吗?

No.

我可以用其他函数覆盖它吗(并且有任何合理的理由这样做)吗?

不和不。

是否可以将任何其他参数传递给 gulp 任务函数?

不,但你为什么要这么做?您的服务拥有 JS 文件的完整范围,只需将参数放在周围的某个位置即可。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

gulp:gulp任务回调函数在哪里定义的? 的相关文章

随机推荐

  • 使用 TalkBack 时,Android focusable 和 importantForAccessibility 有什么区别?

    我注意到在很多情况下android importantForAccessibility yes 可以替换为android focusable true 与 TalkBack 的工作方式完全相同 什么时候应该android important
  • 在 dc.js / Crossfilter 中添加过滤器不更新图表

    js小提琴 http jsfiddle net PYeFP http jsfiddle net PYeFP 我设置了一个条形图 用于显示用户每天的出行次数 tripVolume dc barChart trip volume width 9
  • 了解Android webview javascript接口

    我创建了一个安卓WebView 并注入javascript接口使用addJavascriptInterface mObject jsinterface 它工作正常 直到我使用 JavaScript 在 JavaScript 中创建具有相同名
  • :第一个孩子与 ng-repeat

    我有一个 ng repeat 并且只想将样式应用于第一个div与班级type在 ng repeat 中 div class my list div class type span item label span div div class
  • 拖放 imageview android

    我目前正在开发一款游戏 因为有一个框架布局 其中有一个 Horizo ntalView 和一个 VerticalView 和 AbsoluteLayout 而 Absolutelayout 位于右上角 因为有一个 ImageView 现在
  • 如何更改单个表格行的边框颜色?

    我试图通过更改单个行的边框颜色来突出显示该表行 这是我的CSS table border collapse collapse td min width 100px border 1px solid green highlight td bo
  • MVC5 的嵌套布局

    我看过一些关于这个主题的帖子 具有级联部分的 Razor 嵌套布局 https stackoverflow com questions 5525602 razor nested layouts with cascading sections
  • SSRS 与 Crystal Reports [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 控制多个 JMS 队列的消耗

    我在任何地方都找不到这个信息 我有两个队列 JmsListener destination p1 JmsListener destination p2 如何确保我一次只处理 1 条消息 即使我正在监听 2 个队列 以及如何配置对首先从哪个队
  • 在xamarin中创建一个cocossharp项目

    我是xamarin studio的新手 我试图按照官方指南创建一个cocosproject 但是这个文档不是很清楚 我的项目有很多错误 https developer xamarin com guides xamarin forms adv
  • 多个触发器对一个表具有相同的操作时间和事件mysql错误

    我是触发器新手 并且收到 一张表的多个触发器具有相同的操作时间和事件 错误 我创建了一个更新后和删除后 这是两个单独的操作时间 事件 所以我不太确定为什么会收到错误 这是我的查询 CREATE TRIGGER new enrolment A
  • Caret 包 - 定义积极结果

    在使用 Caret 包进行机器学习时 我对 Caret 的默认 正 结果选择感到震惊 即二元分类问题中结果因素的第一级 软件包说它可以设置为替代级别 任何机构可以帮助我定义积极的结果吗 感谢您 看看这个例子 使用混淆矩阵从插入符号示例中扩展
  • 在 Rstudio 的查看器中显示 Rd 文件

    我在项目文件夹中有函数和数据集的文档 在文档文件夹中 我有所有数据集的 Rd 文件 我希望用户能够调用自定义帮助函数并在查看器中启动 Rd 文件 就像从文件编辑器编译文件时自动完成的那样 是否有可能做到这一点 我不太明白你为什么要这样做 但
  • MagicalRecord:多个数据库

    我有一个使用 MagicalRecord 的应用程序 并且我正在使用大量用于参考的数据预先填充数据库 在同一数据模型中 我拥有与用户在应用程序中可能执行的操作相关的用户可定义信息 该应用程序被拒绝 因为预填充的数据应该被标记为 不备份 因此
  • 异常情况下自动回滚有什么缺点?

    当您编写 Flask sqlalchemy 应用程序并进行数据库查询 异常处理时 如下所示 def add user user User gt bool was the user added errors try db session ad
  • 塑料单片机。这是正确的解决方案吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我知道已经有一些关于塑料 SCM 的问题 但它们已经存在一年多了 最近有人用过Plastic SCM吗 你怎么看待这件事 我已经使用过 git
  • pandas:如何绘制 pandas 中 IMDB 电影的电影数量与类型的饼图?

    我有以下数据集 import pandas as pd import numpy as np matplotlib inline df pd DataFrame movie A B C D genres Science Fiction Ro
  • 存在同名数据库,或无法打开指定文件,或位于 UNC 共享上

    当我在新电脑上运行我的项目时出现此错误 为了避免这种情况 我每次都必须复制粘贴新的连接字符串 有什么办法可以避免这种情况 我有3个不同的数据库 它非常烦人的O O SqlConnection con new SqlConnection Da
  • 复合键作为外键(sql)

    这是我关心的两个表 CREATE TABLE IF NOT EXISTS tutorial beggingTime time NOT NULL day varchar 8 NOT NULL tutorId int 3 NOT NULL ma
  • gulp:gulp任务回调函数在哪里定义的?

    gulp 中的任务可以这样定义 gulp task foobar function callback 我想了解回调函数是什么 它在哪里定义的 我可以在运行时传入其他函数作为参数吗 它有什么作用 这些文档 https github com g