- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下gulpfile.js,我通过命令行执行gulp消息:
var gulp = require('gulp');
gulp.task('message', function() {
console.log("HTTP Server Started");
});
我收到以下错误消息:
[14:14:41] Using gulpfile ~\Documents\node\first\gulpfile.js
[14:14:41] Starting 'message'...
HTTP Server Started
[14:14:41] The following tasks did not complete: message
[14:14:41] Did you forget to signal async completion?
我在 Windows 10 系统上使用 gulp 4。以下是 gulp --version 的输出:
[14:15:15] CLI version 0.4.0
[14:15:15] Local version 4.0.0-alpha.2
最佳答案
由于您的任务可能包含异步代码,因此您必须在任务完成执行时发出 gulp 信号(=“异步完成”)。
在 Gulp 3.x 中,您无需执行此操作即可逃脱。如果您没有明确发出异步完成信号,那么 gulp 只会假设您的任务是同步的,并且任务函数一返回就完成。 Gulp 4.x 在这方面更加严格。您必须明确表示任务已完成。
您可以在six ways中做到这一点:
如果您只是想打印一些东西,这并不是一个真正的选择,但它可能是最常用的异步完成机制,因为您通常使用 gulp 流。这是一个(相当人为的)示例,为您的用例演示了它:
var print = require('gulp-print');
gulp.task('message', function() {
return gulp.src('package.json')
.pipe(print(function() { return 'HTTP Server Started'; }));
});
这里重要的部分是return
陈述。如果不返回流,gulp 无法确定流何时完成。
Promise
这是一个更适合您的用例的机制。请注意,大多数时候您不必创建 Promise
你自己对象,它通常由包提供(例如经常使用的 del
包返回 Promise
)。
gulp.task('message', function() {
return new Promise(function(resolve, reject) {
console.log("HTTP Server Started");
resolve();
});
});
使用async/await语法可以进一步简化。所有功能标记为 async
隐式返回一个 Promise,因此以下内容也有效(如果您的 node.js version supports it ):
gulp.task('message', async function() {
console.log("HTTP Server Started");
});
这可能是适合您的用例的最简单方法:gulp 自动将回调函数作为其第一个参数传递给您的任务。完成后只需调用该函数即可:
gulp.task('message', function(done) {
console.log("HTTP Server Started");
done();
});
如果您必须直接调用命令行工具,因为没有可用的 Node.js 包装器,那么这非常有用。它适用于您的用例,但显然我不会推荐它(特别是因为它不太便携):
var spawn = require('child_process').spawn;
gulp.task('message', function() {
return spawn('echo', ['HTTP', 'Server', 'Started'], { stdio: 'inherit' });
});
Observable
.我从未使用过这种机制,但如果您使用 RxJS,它可能会很有用。如果你只想打印一些东西,那就有点矫枉过正了:
var of = require('rxjs').of;
gulp.task('message', function() {
var o = of('HTTP Server Started');
o.subscribe(function(msg) { console.log(msg); });
return o;
});
EventEmitter
与前一个一样,为了完整起见,我将其包括在内,但除非您已经在使用EventEmitter
,否则您实际上不会使用它。由于某种原因。
gulp.task('message3', function() {
var e = new EventEmitter();
e.on('msg', function(msg) { console.log(msg); });
setTimeout(() => { e.emit('msg', 'HTTP Server Started'); e.emit('finish'); });
return e;
});
关于 gulp 错误: The following tasks did not complete: Did you forget to signal async completion?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36897877/
我写了我认为会很简单的代码,但它的行为不正常。 我的预期输出是: I'm fine with printing it here 3 Can be printed as much as I want 3
我将 Ruby 与 SQLite3 结合使用,不幸的是,我尝试在 Sqlite3 中使用外键没有成功。根据 sqlite3 --version,安装了 3.7.13 版本。据我所知,Sqlite3 从
使用 Perl6 的 Date 时处理格式化程序对象是否有错误?如果我在实例化对象后操作日期,则格式化程序似乎返回到默认值。 my $d = Date.new(2019, 12, 25, format
我的软件在 HKCU\Software\mysoftware 中存储了一些值,这从来都不是问题。但是,我现在还在 HKCU\Software\mysoftware\Licenses 中存储了一些值 -
我有一个看起来像这样的小终点 val numbers = it.bodyAsString.parseJsonList() processedNumbers = numberService.proces
我有一个方法 public static void startAnimation() { new AnimationThread().run(); } 其中AnimationThread实现了
下面的代码片段来 self 的程序,该程序获取单词,然后打印它们以及出现的次数。 它工作得几乎很好,除了它“忘记”之前已经保存过的特定条目并且不增加与其关联的计数器。 typedef struct {
在 c# 中,当您在异步方法中调用 await 方法时,代码将从调用上下文执行到该方法。如果我想进行一个异步调用,它将直接从同一行代码继续(即使异步操作尚未完成)而不是返回调用上下文怎么办?我该怎么做
很抱歉以愚蠢的方式提问,但我不知道如何从技术上表达。 我的项目是打字训练。如果用户写的字母(userWord[i],使用 getch() 从键盘获得)与我给他的单词中对应的字母(filas[maxIn
我有一个创建并返回 Pane 的函数,该 Pane 存储在其他地方。当用户按下按钮时会显示此信息。 public Pane createBoard(Board d){ TilePane
我目前正在研究结构类型。我怀疑两种类型仅仅因为它们碰巧有一部分结构相同就被认为是等价的。这感觉很像静态鸭子类型,它完全忽略了类型的语义级别。于是仔细查看了flow对普通对象的结构类型,遇到了如下行为:
那么,假设我有一个 users table 和一个 pages table 。假设我想允许用户隐藏/忘记/忽略某些页面。在这一点上,我可以想到两种可能的方法: 与null 的外部连接匹配: 我可以创建
我在一个实体上有一个 NSOrderedSet 关系。在我保存、退出并重新启动应用程序之前,对象的顺序是正确的。然后,当获取实体时,对于实体的某些实例,此关系的顺序与重新启动之前的顺序不同。就好像 N
我使用 SFSafariViewController 开发了一个移动应用程序来展示一个网站,其中访问过的链接使用 CSS :visited 伪类 ( https://developer.mozilla
我需要着火并忘记调用某些异步方法。我意识到 VS 建议我可以将调用设置为 _discard 并且 IDE 警告消失。但我不确定与丢弃一起使用时是否仍未等待该调用。会是吗? public async
我正在使用 Task.Run(() => this.someMethod()) 来安排后台作业。我对操作结果不感兴趣,需要继续申请流程。 但是,有时我的后台任务很长时间都没有安排。自从我们从 .Net
我有以下代码,编译器无法看到作为参数传递给函数的变量是 constexpr,这让我很恼火,因此我必须使用 arity 0 函数而不是 1 参数函数。 我知道这不是编译器错误,但我想知道是否有可以解决此
这个问题在这里已经有了答案: Strange result when removing item from a list while iterating over it (8 个回答) 关闭7年前。
我有这个代码: #!/bin/bash pids=() for i in $(seq 1 999); do sleep 1 & pids+=( "$!" ) done for pid in "
我有一个 Python Kafka 消费者应用程序,我在其中消费消息,然后同步调用外部网络服务。 Web 服务需要一分钟时间来处理消息并发送响应。 有没有办法在不等待响应的情况下使用消息、向 Web
我是一名优秀的程序员,十分优秀!